为什么Jquery rest未定义

Why Jquery rest undefined?

本文关键字:未定义 rest Jquery 为什么      更新时间:2023-09-26

我编写了用户脚本,在Chrome中遇到了问题(使用Greasemonkey的Firefox可以):我用坦珀蒙基;这是代码:

// 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() ;
}

函数wait中的脚本循环和typeof jQuery(或$…)始终未定义。我已经用控制台检查了页首HTML,jQuery已经正确加载。。。

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

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

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

Chrome明智地没有关闭它的沙箱,所以代码在那里不起作用。但是,对于Tampermonkey,您不希望以这种方式添加jQuery
您希望使用@require添加jQuery。这使您的脚本更快,更安全并且不太可能破坏页面上的东西或被破坏。

这个答案的第二部分中可以找到一种很好的添加jQuery的跨浏览器技术,即在@require可用时使用它。