【发布时间】:2021-03-29 01:27:07
【问题描述】:
我目前正在制作一个用户脚本来解释 Stack Exchange 聊天窗口中的 APL 编程语言。这是我想出的代码:
// ==UserScript==
// @name APL chat
// @version 1
// @grant none
// @match https://chat.stackexchange.com/*
// @require https://cdn.jsdelivr.net/npm/apl@0.1.15/lib/apl.min.js
// ==/UserScript==
window.onload = function() {
var prevCode = "";
setInterval(function() {
var codes=document.getElementsByTagName("code");
//console.log(codes);
var elem = codes[codes.length-1];
if((elem != prevCode) && (elem.innerText[0] == '⋄')){
var result = apl(elem.innerText).toString();
prevCode = elem;
var tmp = document.createElement("div");
tmp.innerHTML = "<pre style=\"color:red\">"+result.replace("\n","<br>")+"</pre>";
var parent = elem.parentElement;
parent.appendChild(tmp.firstChild);
console.log(result);
}
},100);
}
当一个代码块被写入带有⋄ 字符的主体时,它应该被执行并在代码下方显示为红色。但是,这并不总是有效。
这些是我在Chat Sandbox 中测试时遇到的错误:
脚本在正确的网站中打开,但在 Chrome 87.0.4280.88 的控制台中,我收到以下错误消息:
Uncaught TypeError: Cannot read property 'innerText' of undefined
at eval (userscript.html?name=APL%20chat.user.js&id=eb8ebba5-9381-48c2-9f2d-d735cbcb847e:1260)
apl() 函数采用单个字符串并以 APL 语言进行解释,并使用 ngn's javascript APL interpreter 从 @require 语句导入。
另一个问题是,当我尝试从@require 访问apl() 函数时,它显示ReferenceError: apl is not defined。这在 Chrome 和 Firefox 上都会发生。
这些问题的正确解决方法是什么?
【问题讨论】:
-
您能否提供一个最小的可重现示例
innerText错误?什么是失败的示例聊天消息?如果您将整个代码减少到console.log(codes[codes.length-1].innerText),它仍然会以同样的方式失败吗?排除@require apl.min.js后是否仍然失败? -
对不起,我错误地赏金了。此版本已使用更好的算法进行了修复。 This is the current problem I need help with.
标签: javascript google-chrome firefox tampermonkey