我有一个简单的greasemonkey脚本,可以进行一些简单的dom操作。greasemonkey脚本是在DOM加载之后加载的,这很好,所以它对初始页面有效。但是在这个站点(它是twitter ;-)上,页面的某些部分在xmlhttprequest单击后加载,而这部分并没有被我的greasemonkeyscript所操纵。
在加载xmlhttprequest或请求更改DOM之后,是否可以再次运行该脚本?
发布于 2009-07-06 12:40:56
谢谢霍华德。这是正确的方向。
很难找到正确的入口点来劫持一个迷你脚本上的函数。但我发现twitter脚本中有一个huck。它在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-06 11:19:20
在使用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响应事件时注入自己的功能。
https://stackoverflow.com/questions/1086417
复制相似问题