ERROR: Execution of script failed! $ is not defined

ERROR: Execution of script failed! $ is not defined

我已经在 Tampermonkey (Firefox) 上使用我的脚本 6 个月了。 现在我有这个错误,脚本部分工作,而不是所有时间。 不知道为什么。

我已经尝试了关于 jQuery 的各种建议,但没有用

我的脚本顶部:

(function() {
    'use strict';
function RPP(){
    RedeemRPProduct('fp_bonus_100');
}

var body = $('body'); //I think error is here..

var points = {};

现在脚本有时会起作用。当它不起作用时出现在控制台中这个错误: 错误:执行脚本 'script-name' 失败! $ 未定义

发生什么事了?

谢谢

您在 jQuery 加载到页面之前引用了它(通过 $)。 它有时会工作,因为我猜在某些情况下 jQuery 在您拨打电话之前设法加载...但有时它不会,您会看到错误。

试试这个:

<script src="...your jquery reference..."/> <!-- at the top of your page -->

<!-- at the bottom of the page -->
<script>
var body;
var points = {};

document.addEventListener("DOMContentLoaded", function() {
    body = $(body); //it won't try and use jQuery until the doc is ready

    //...other script stuff...
});

</script>

我认为原因是网站管理员从他们的代码中删除了 jQuery。对于现代 JS,它对于选择器之类的东西基本上已经过时了。我建议简单地从脚本中删除 jQuery 引用并使用正常的 DOM API:

要访问正文:

document.body

使用选择器查找元素:

document.querySelector("div#my_div")

或者您可以使用 @require 在脚本中包含 jQuery。

我看到你的问题已经解决了,但是把这个留在这里留给其他有同样错误的人...

我也在使用 Firefox,我的 Tampermonkey 已经 1 岁了(我忘了我禁用了插件的自动更新)。它工作正常,我从来没有遇到过你描述的问题。直到几天前,当我更新到新版本时,我的用户脚本有 10% 的时间停止加载(在控制台中收到提到的错误消息)。

较新的 Tampermonkey-s 比旧版本快得多,加载用户脚本更早,有时甚至在加载原始站点的 jQuery 库脚本之前,即使您正在使用 // @run-at document-end .

我的解决方法:将我的整个用户脚本内容包装到 1 个函数中,仅当 jQuery 脚本 100% 加载时才调用该函数,使用检查函数。

将下一行添加到脚本的顶部,就在 Header 之后:

function runScript() {

将下一行添加到脚本底部(到末尾):

};

var waitForJQuery = setInterval(function () {
    if (typeof $ != 'undefined') {
        $(runScript);
        clearInterval(waitForJQuery);
    }
}, 100);