我完全不熟悉greasemonkey,javascript,实际上是所有UI东西。

要求:页面加载后,用户脚本由GS运行一次。但是,我需要在不刷新的情况下多次运行同一脚本

用例:例如,Amazon.com搜索使用Ajax进行。我需要在搜索结果中嵌入自定义元素。

每次在同一页面上进行搜索(没有页面刷新)时,我都需要将我的内容和结果一起注入到search-results-div中。

我当前脚本仅在页面刷新时运行。

我希望上面的解释清楚。请帮忙。

#1 楼

最简单,最可靠的方法是使用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);


评论


非常感谢!!!!!尽管我有一定的编程经验,但是这种UI脚本让我有点烦(烦恼)。您的代码完全按照我想要的方式执行。我将对其进行自定义以满足进一步的要求。再次非常感谢。

–火狐
2012年6月25日在22:59

我正在尝试使用它,但没有给我任何有用的东西。它在我需要时触发,但是“ jNode”中的值只是“对象”类型。它似乎不是节点,元素或任何东西。要求jNode.innerHTML产生“未定义”。 jNode.parent产生一个函数文本,看起来像是在waitForKeyElements脚本内部。

– Sean Worle
18/12/4在21:28

@ SeanWorle,jNode是一个jQuery对象。例如,您将使用jNode.html()。

–布鲁克·亚当斯(Brock Adams)
18/12/4在21:33

@BrockAdams啊,有帮助。令人沮丧的是,“ typeof”运算符不会告诉我-它仅将类型报告为“对象”。

– Sean Worle
18/12/5在22:19

我曾经用过它,但是我不明白为什么,该函数为null。当然,@ require标签位于页面顶部

–萨尔瓦多·迪·法齐奥(Salvatore Di Fazio)
19年3月22日在17:32

#2 楼

您可以使用DOMNodeInserted事件来调用您的回调,例如:

document.addEventListener('DOMNodeInserted', function() { alert('hi') }, false);


请注意,该事件将由页面结构中的任何更改触发,因此您将拥有检查您是否定位了正确的更改。

评论


非常感谢,我会检查一下。是否可以跟踪与搜索按钮相关的“点击”事件?

–火狐
2012年6月25日19:56

突变事件已被弃用,错误,并且在实践中不容易使用。 ...您可以跟踪click事件,但是实际的页面更改将在此之后的某个随机间隔(最多几秒钟)内发生。

–布鲁克·亚当斯(Brock Adams)
2012年6月25日在22:01

https://developer.mozilla.org/zh-CN/docs/Web/Guide/Events/Mutation_events已弃用,不应使用。请改用https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver。

–user136036
16-4-23 0:00