【问题标题】:Why Jquery rest undefined?为什么 Jquery 未定义?
【发布时间】:2013-01-26 20:47:15
【问题描述】:

我编写了用户脚本,但我在 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 已正确加载...

【问题讨论】:

  • 这在这里工作...jsfiddle.net/ACWsP您的控制台日志中有任何错误吗?你确定它没有在 Main() 的某个地方循环吗?
  • 日志中没有错误,并且可以确定在 waitJquery 中我在使用此功能时会出现“警报”循环...

标签: javascript jquery google-chrome tampermonkey


【解决方案1】:

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

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

this answer 的第二部分中可以找到添加 jQuery 的一个很好的跨浏览器技术——当它可用时使用@require

【讨论】:

  • 我测试了你的提议,我的用户脚本注入了所有脚本,这很好!但是控制台javascript说:未捕获的ReferenceError:未定义jQuery未捕获的ReferenceError:$未定义我的script.user.js调用脚本谁使用jquery...
  • 是的,这是因为 jQuery 保留在它所属的沙盒脚本范围内,而不是控制台将看到它的页面范围内。 ...如果您想在 Chrome 的控制台中玩转,请将控制台上下文切换到 Tampermonkey,as shown in this answer,您将看到 $jQuery 已定义。
  • 是的,所以我的用户脚本是一个项目,他使用了十多个外部脚本......我想把这个分解成几个脚本,例如脚本 5 需要脚本 2 中的一个函数,怎么能我愿意 ? (有任何合并)
  • 嗯?恐怕我听不懂你在说什么。您可能应该打开一个包含确切详细信息的新问题。
  • 有链接!工作我的脚本等待 jquery 但它使用另一个以相同方式注入的脚本是我在脚本中调用的函数未定义
【解决方案2】:

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

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

【讨论】:

  • 啊,好吧,我明白了我的问题,你有对应示例的链接吗?否则谢谢我应该能够应付......
  • 看看here
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 2013-02-03
  • 1970-01-01
  • 2020-05-12
  • 2021-07-22
  • 2021-07-18
相关资源
最近更新 更多