gpt4 book ai didi

javascript - 为什么异步代码在 Chrome 上的 Tampermonkey 中失败?

转载 作者:行者123 更新时间:2023-11-30 19:33:59 26 4
gpt4 key购买 nike

这段代码:

(async ()=>{
let i=0;
while (1) {
await sleep(1);
console.log(i++);
}
})();
function sleep(ms){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
resolve();
},ms);
})
}

在浏览器中正常工作,但在 Tampermonkey 用户脚本中失败:

Uncaught (in promise) TypeError: Cannot convert undefined or null to object
at eval (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:24)
at new Promise (<anonymous>)
at sleep (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:23)
at eval (userscript.html?id=4ef091f1-f006-441d-bf58-4bd22750f636:18)

经过将近 3k 次迭代。

我认为 promises 在 Tampermonkey 中不能正常工作。

使用 chrome 74、Tampermonkey 4.8.41

有什么想法吗?

更新:该错误不在 promise 中。此代码也失败了:

(function() {
'use strict';

function doWork(){
console.log(doWork.i++);
setTimeout(doWork,1);
}
doWork.i=0;
doWork();

})();

在 Opera 和 FF 中,一切都完美无缺。

更新:无限循环仅供示例。但它在 node、chrome、FF 中测试了工作和内存泄漏。我认为,它发生在一个 Tampermonkey 脚本中的许多(对我来说> 4k)异步调用。我会尽快尝试提供一些没有无限循环的其他代码。

最佳答案

它是用于 chrome 沙箱错误的 Tampermonkey。(可能是这个 chrome issue 引起的)此代码修复它,直到问题不会在 TM 或 Chrome 中修复。我使用了另一种注入(inject)方式:

var scriptText=`
/* some code fails with this bug */
`;
var newScript = document.createElement("script");
var inlineScript = document.createTextNode(scriptText);
newScript.appendChild(inlineScript);
document.body.appendChild(newScript);

关于javascript - 为什么异步代码在 Chrome 上的 Tampermonkey 中失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56138740/

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