3

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

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

4

2 回答 2

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 响应事件发生时注入您自己的功能。

于 2009-07-06T11:19:20.243 回答
1

谢谢霍华德。这是朝着正确方向前进的道路。

很难找到正确的入口点来劫持缩小脚本上的函数。但是我发现推特脚本中有一个哈克。它确实在 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;
    }
于 2009-07-06T12:40:56.303 回答