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);
我已经在 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);