简单地“@require”-调用第三方库会导致javascript错误吗?
我正在尝试创建一个运行的用户脚本。但当我运行它时,我得到: 错误:执行脚本“New Userscript”失败!插值器是 未定义 我的用户脚本如下所示:简单地“@require”-调用第三方库会导致javascript错误吗?,javascript,greasemonkey,userscripts,tampermonkey,Javascript,Greasemonkey,Userscripts,Tampermonkey,我正在尝试创建一个运行的用户脚本。但当我运行它时,我得到: 错误:执行脚本“New Userscript”失败!插值器是 未定义 我的用户脚本如下所示: // ==UserScript== // @name New Userscript // @namespace http://tampermonkey.net/ // @version 0.1 // @description try to take over the world! // @author
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match www.istrolid.com
// @grant none
// @require https://rawgit.com/Rio6/Istrolid-js-ai/master/r26Ai.js
// ==/UserScript==
console.log(r26Ai);
几个问题,从大到小:
插值器)
@match
指令不正确,需要仅设置这些游戏页面@require
不能用于该库。现在,改用脚本注入
您需要使用计时器(最后手段)或事件(最佳选项)或战略节点(次优选项)来告诉何时注入脚本。查找事件(如果存在)或战略节点是一门艺术,并且是特定于页面的。这超出了本文的范围,因此在下面的示例代码中使用了计时器@name
应设置为合理值或忽略重要提示:请注意,
Interpolator
是该站点特有的页面特定功能,我们在此处使用该功能作为指示(a)我们正在适当的页面上运行,以及(b)是开始检查游戏负载的时候了
// ==UserScript==
// @name Istrolid.com, use Istrolid Javascript AI API
// @version 0.2
// @match *://www.istrolid.com/game.html*
// @grant none
// ==/UserScript==
/*-- Wait for game to load. Try to find an event or node that signals
this, instead of one or two timers.
*/
var sfStrtTmr = setInterval ( () => {
if (typeof Interpolator === "function") {
clearInterval (sfStrtTmr);
setTimeout (loadPoorScript, 1111);
}
}, 333);
function loadPoorScript () {
var newNode = document.createElement ('script');
newNode.onload = runScriptMain;
newNode.src = "https://rawgit.com/Rio6/Istrolid-js-ai/master/r26Ai.js";
document.body.appendChild (newNode);
}
function runScriptMain () {
// ALL OF YOUR CODE GOES HERE.
console.log ("r26Ai: ",r26Ai);
}