我对 Greasemonkey、javascript,实际上是所有 UI 的东西都是全新的。
要求:用户脚本在页面加载后由 GS 运行一次。但是,我需要多次运行相同的脚本而不刷新
用例:例如,Amazon.com 搜索使用 Ajax。我需要在搜索结果中嵌入自定义元素。
每次在同一页面中发生搜索时,我都需要将我的内容与结果一起注入到 search-results-div 中(没有页面刷新)
我当前的脚本仅在页面刷新时运行。
我希望上面的解释清楚。请帮忙。
我对 Greasemonkey、javascript,实际上是所有 UI 的东西都是全新的。
要求:用户脚本在页面加载后由 GS 运行一次。但是,我需要多次运行相同的脚本而不刷新
用例:例如,Amazon.com 搜索使用 Ajax。我需要在搜索结果中嵌入自定义元素。
每次在同一页面中发生搜索时,我都需要将我的内容与结果一起注入到 search-results-div 中(没有页面刷新)
我当前的脚本仅在页面刷新时运行。
我希望上面的解释清楚。请帮忙。
最简单、最可靠的方法是使用waitForKeyElements() 实用程序。
这是一个使用 jQuery 并更改亚马逊搜索结果的完整脚本:waitForKeyElements
// ==UserScript==
// @name _Amazon Search, alter results
// @include http://www.amazon.com/s/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
function addCustomSearchResult (jNode) {
//***** YOUR CODE HERE *****
jNode.prepend (
'<div id="result_000" class="fstRow">Buy my stuff, instead!</div>'
);
}
waitForKeyElements ("#atfResults", addCustomSearchResult);
您可以使用该DOMNodeInserted
事件来调用您的回调,例如:
document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false);
请注意,该事件将由页面结构的任何更改触发,因此您必须检查您是否针对正确的更改。