2009-03
16

GreaseMonkey这个插件大家都早已熟悉了。最近我遇到一个问题:需要让页面在调用完某个函数之后自动执行我的函数。 其实这个并不难,写个函数替换原有的函数即可:

function hook() {
  var f = unsafeWindow.foo;         // 保存旧函数
  unsafeWindow.foo = function() {   // 定义新函数
    alert("Hello!");                // 先执行我们的处理
    f();                            // 再执行旧函数
  }
}

然后加载到页面上:

setTimeout(hook, 1000);

这样,页面再执行foo函数时,就会先执行我们的alert("Hello!")了。

不过这个函数还有很大的问题。比如,原有函数的参数不能正确传给foo,返回值无法取出来,无法应用到对象中的方法,通用性不好等。 下面来一个个解决。

阅读全文 »