javascript - 为什么 jQuery 在我的 GreaseMonkey 脚本中加载两次

标签 javascript jquery greasemonkey

出于某种原因,我的 Firefox4+GreaseMonkey 脚本加载了 jQuery 两次。我复制‘粘贴’了以下代码片段,“测试”警报显示了两次。

问候

var $;

// Add jQuery
(function(){
    if (typeof unsafeWindow.jQuery == 'undefined') {
        var GM_Head = document.getElementsByTagName('head')[0] || document.documentElement,
            GM_JQ = document.createElement('script');

        GM_JQ.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js';
        GM_JQ.type = 'text/javascript';
        GM_JQ.async = true;

        GM_Head.insertBefore(GM_JQ, GM_Head.firstChild);
    }
    GM_wait();
})();

// Check if jQuery's loaded
function GM_wait() {
    if (typeof unsafeWindow.jQuery == 'undefined') {
        window.setTimeout(GM_wait, 100);
    } else {
        $ = unsafeWindow.jQuery.noConflict(true);
        letsJQuery();
    }
}

// All your GM code must be inside this function
function letsJQuery() {
    alert("test");
}

最佳答案

这可能是因为目标页面正在加载框架或 iframe。

将这些行添加到脚本代码部分的顶部:

if (window.top != window.self)  //-- Don't run on frames or iframes
    return;


此外,如果您只是使用 FF + GM,请不要为加载 jQuery 而费心费力。 GM 现在可以使用更高版本的 jQuery。

只需添加一行:

// @require http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js

进入脚本的元数据 block 。 jQuery 将被复制一次 到您的本地计算机上并从那里运行——消除脚本运行时有时可能出现的几秒钟延迟。

如果您使用 GM 模拟扩展之一,例如 TamperMonkey,此类脚本可以在 Chrome 中运行.

关于javascript - 为什么 jQuery 在我的 GreaseMonkey 脚本中加载两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5876874/

相关文章:

javascript - 如何计算 Angular 或javascript中分组数组的长度?

javascript - 如何将 React 导航作为组件使用

jquery - jquery隐藏鼠标光标的方法

javascript - 从 JSON 中删除项目,从 json obj 中删除 'reset' 索引 - jquery

javascript - 使用 Greasemonkey 脚本将 javascript 添加到使用 XSLT 转换的 XML 文件

javascript - 我应该在 Greasemonkey 或 Chrome 扩展的用户脚本中缩小 javascript 吗?

javascript - 如何自定义 Bootstrap 工具提示弹出框的文本字体大小?

javascript - SocketIo - 设置套接字变量不起作用

jquery - 模拟点击不起作用... jQuery

javascript - 如何捕捉 GMail 自动刷新