如何在AJAX-Request之后加载greasemonkey脚本

时间:2009-07-06 10:46:53

标签: javascript greasemonkey

我有一个简单的greasemonkey脚本,可以进行一些简单的dom操作。在加载DOM之后加载greasemonkey脚本,这很好,因此它适用于初始页面。但是在这个网站上(它是推特;-))页面的一部分在xmlhttprequest点击后被加载,这部分没有被我的greasemonkeyscript操纵。

在加载xmlhttprequest之后或者在请求更改DOM之后,是否有可能再次运行脚本?

2 个答案:

答案 0 :(得分:3)

使用Greasemonkey时的一个强大技术是'劫持'现有的JavaScript函数。如果您正在更改的页面有一个名为processAjaxResponse的函数,该函数在处理XmlHttpRequest响应时被调用,您可以在Greasemonkey脚本中执行以下操作:

var originalProcessAjaxResponse;

function myNewProcessAjaxResponse() {
  /* Manipulate DOM if you need to, and then... */
  originalProcessAjaxResponse();
}

function hijack() {
  var originalProcessAjaxResponse = processAjaxResponse;
  processAjaxResponse = myNewProcessAjaxResponse();
}

这允许您在AJAX响应事件发生时注入自己的功能。

答案 1 :(得分:1)

谢谢霍华德。这是正确的方向。

很难找到一个在minifyied脚本上劫持函数的正确入口点。但是我发现twitter脚本中有一个哈欠。它在Ajax请求之后调用window.onPageChange。 (我想知道这是否是javascript中常见的最佳实践,如果其他人也这样做了?)我确实在http://userscripts.org/scripts/review/47998上找到了一些代码,它确实使用这个可能性来附加事件。

        if (typeof unsafeWindow.onPageChange === 'function') {
        var _onPageChange = unsafeWindow.onPageChange;
        unsafeWindow.onPageChange = function(){
            _onPageChange();
            filter();
        };
    } else {
        unsafeWindow.onPageChange = filter;
    }