Javascript 为什么jqueryrest未定义?

Javascript 为什么jqueryrest未定义?,javascript,jquery,google-chrome,tampermonkey,Javascript,Jquery,Google Chrome,Tampermonkey,我编写了用户脚本,但Chrome有问题(Firefox和Greasemonkey可以): 我用猴子;代码如下: // Header... (function addjQuery() { var head = document.getElementsByTagName('head')[0] ; var jQuery = document.createElement('script'); jQuery.type = 'text/javascript'; jQuer

我编写了用户脚本,但Chrome有问题(Firefox和Greasemonkey可以): 我用猴子;代码如下:

// 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中循环,jQuery的
类型(或$…)始终未定义。我已经用控制台检查了HTML页面的头部,jQuery已经正确加载

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


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

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

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


添加jQuery的一种很好的跨浏览器技术——在可用时使用
@require
,可以在的第二部分找到。

这在这里起作用。。。您的控制台日志中有任何错误吗?你确定它没有在
Main()
中的某个地方循环吗?日志中没有错误,而且在waitJquery中,当我使用此函数时,肯定有“警报”循环……啊,好的,我看到了我的问题,你有相应示例的链接吗?否则谢谢我应该能够应付…看看我测试你的提议和我的用户脚本注入所有脚本它的好!但是控制台javascript说:uncaughtreferenceerror:jQuery未定义uncaughtreferenceerror:$未定义我的脚本。user.js调用使用jQuery的脚本…是的,这是因为jQuery保留在它所属的沙盒脚本范围内,而不是控制台将看到它的页面范围内。。。如果你想在Chrome的控制台中玩,将控制台上下文切换到Tampermonkey,你会看到
$
jQuery
定义。是的,所以我的用户脚本是一个项目,他使用了十多个外部脚本。。。我想将这个分解保持为几个脚本,例如脚本5需要脚本2中的函数,我该怎么做?(有合并)嗯?恐怕我不明白你在说什么。你可能应该打开一个新的问题,提供确切的细节。这里有一个链接!要使用我的脚本,请等待jquery,但它使用的另一个脚本与我在脚本中调用的函数未定义的情况相同