gpt4 book ai didi

javascript - 简单地 `@require` -ing 第三方库会导致 javascript 错误?

转载 作者:行者123 更新时间:2023-11-30 14:45:26 29 4
gpt4 key购买 nike

我正在尝试创建一个运行 another person's Istrolid AI library 的用户脚本.但是当我运行它时,我得到:

ERROR: Execution of script 'New Userscript' failed! Interpolator is not defined

我的用户脚本是这样的:

// ==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);

最佳答案

几个问题,从大到小:

  1. 该库仅在游戏页面上有效(这是定义Interpolator 的地方)。

  2. @match 指令不正确,需要仅针对那些游戏页面进行设置。

  3. 游戏需要一些时间来加载和初始化——至少一秒钟。

  4. 那个库写得不好,加载会崩溃之前然后。

    这意味着 @require 不能用于该库。现在,改用脚本注入(inject)。

    您将需要使用计时器(最后手段)或事件(最佳选择)或战略节点(次佳选择)来告知何时注入(inject)脚本。查找事件(如果存在)或战略节点有点特定于艺术和页面。这超出了此处的范围,因此在下面的示例代码中使用了一个计时器。

  5. 其他指令,尤其是 @name 应该设置为合理的值或省略。

将它们放在一起,这个脚本将带您进入下一步(这超出了这个问题的范围):

// ==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);
}

重要提示:请注意,Interpolator 是页面特定的函数,对于该站点而言是独一无二的,我们在此处用作指示器,表明 (a) 我们正在适当的页面上运行,并且 (b) 是时候了开始检查游戏负载。

关于javascript - 简单地 `@require` -ing 第三方库会导致 javascript 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48999415/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com