-1

我编写用户脚本,但在 Chrome 中遇到问题(带有 Greasemonkey 的 Firefox 可以):我使用 Tampermonkey;这是代码:

// Header...

(function addjQuery() {
    var head = document.getElementsByTagName('head')[0] ;
    var jQuery = document.createElement('script');

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

    head.appendChild(jQuery);
    waitjQuery() ;
 })();

function waitjQuery(){
    typeof jQuery == 'undefined' ? setTimeout(waitjQuery, 50) : main() ;
}

我的脚本在函数等待中循环并且typeof jQuery(或 $...)始终未定义。我已经使用控制台检查了页面 HTML 的头部,并且 jQuery 已正确加载...

4

2 回答 2

2

谷歌浏览器扩展是沙盒的。因此,您附加到 DOM 的 jQuery 对您的脚本不可用。如果你想在你的扩展中使用 jQuery,你需要在清单文件中定义它。如果你想在页面的域中运行你的脚本,那么你应该在页面中存在 jQuery 之后注入它。

因此,您不想检查 jQuery 是否存在,因为它永远不会,而是如果包含 jQuery 的脚本元素已被附加。

于 2013-02-11T17:42:37.827 回答
0

您的脚本在 Greasemonkey 中工作只是一个侥幸,一旦您尝试使用任何 Greasemonkey API,(GM_函数)它将停止工作。这是因为 Greasemonkey 现在愚蠢地在选择条件下关闭了沙箱,并且脚本代码混合了页面范围和脚本范围(一种危险的做法)。

Chrome 明智地不会关闭它的沙箱,因此代码在那里不起作用。但此外,对于 Tampermonkey,您不想以这种方式添加 jQuery!
您想使用@require. 这使您的脚本更快、更安全,并且不太可能破坏页面上的某些内容或被破坏。

在此答案@require的第二部分中可以找到一种用于添加 jQuery 的良好跨浏览器技术——在可用时使用。

于 2013-02-11T21:36:54.343 回答