用jQuery greasemonkey,如何编写greasemonkey脚本来修改页面DOM元素?

时间:2011-09-02 13:11:52

标签: javascript jquery dom greasemonkey

从greasemonkey wiki页面,有一个使用带有greasemonkey的jQuery的例子。代码如下所示,页面位置为http://wiki.greasespot.net/Third-Party_Libraries#jQuery

// ==UserScript==
// @name          jQuery Example
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

// Append some text to the element with id someText using the jQuery library.
$("#someText").append(" more text.");

此示例脚本直接修改DOM。我是否需要使用jQuery function这样的代码包围代码:

// ==UserScript==
// @name          jQuery Example
// @require       http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js
// ==/UserScript==

// Append some text to the element with id someText using the jQuery library.
jQuery(function(){
    $("#someText").append(" more text.");   
})

我问这个问题是因为每次刷新页面时都不会执行我的greasemonkey代码。有关这个问题的任何想法? 感谢。

1 个答案:

答案 0 :(得分:3)

不,没有必要在jQuery()电话中包装您的脚本代码,也不能使用$(document).ready ()

Greasemonkey在DOMContentLoaded事件(与jQuery包装器或ready事件相同)之后以及加载GM的jQuery版本后自动触发。

另请注意,该Wiki页面已过时。 GM现在可以正常使用jQuery 1.6.2。

您没有显示相关代码,也没有链接到目标网页,但最可能的原因是“每次页面都不会执行Greasemonkey代码刷新“是:

  1. GM脚本中存在错误。

  2. 目标内容通过AJAX单独加载 您可以使用此模式中的代码来解决这个问题:

    //--- This handles both page-load delays, and AJAX changes.
    setInterval (function() { checkForTweetbox (); }, 500);
    
    function checkForTweetbox () {
        var tweetbox = document.querySelector ('div.tweet-box textarea');
        if (tweetbox) {
            if (! tweetbox.weHaveProcessed) {
                tweetbox.weHaveProcessed    = true;
                alert ('New tweet-box found!');
            }
        }
    }