gpt4 book ai didi

javascript - chrome扩展无法读取未定义的属性 'currentScript'

转载 作者:行者123 更新时间:2023-11-28 10:50:20 24 4
gpt4 key购买 nike

我在 Chrome 扩展中定义了 XHR 请求,该请求从特定网站提取 JavaScript 文件并在其中执行函数。像这样:

//This will return the remote JS file content
function _curl(url) {
var xhr = new XMLHttpRequest();
xhr.open('get', 'https://allow-any-origin.appspot.com/' + url, false);
xhr.send();
return xhr.responseText;
}

//Here I get the JS content and execute it
var rpt = _curl('https://my-page.com/remote.js').match(/\){([^]+)}/)[1];
eval(rpt); //This fails with the error "Cannot read property 'currentScript' of undefined"

远程文件中定义currentScript的JS代码部分是:

...
var Uh=window.document.currentScript&&-1!=window.document.currentScript.src.indexOf("?loadGamesSDK")?"/cast_game_sender.js":"/cast_sender.js",
...

发生这种情况是因为我尝试在 Chrome 环境中执行请求吗?因为,我还尝试通过 eval 内容在页面内执行请求,这有效。只是每当我尝试在扩展中执行相同的代码时,它就会弹出此错误

最佳答案

我没有注意到该脚本是在后台页面中运行的。它始终具有 window.document 属性。但是,由于 eval 失败,我尝试将其替换为 jQuery.globalEval它起作用了。

我认为它起作用的原因是 eval 没有在 jQuery.globalEval 提供的全局环境中执行。 This answer详细解释一下这种行为。

工作代码现在看起来像:

//This will return the remote JS file content
function _curl(url) {
var xhr = new XMLHttpRequest();
xhr.open('get', 'https://allow-any-origin.appspot.com/' + url, false);
xhr.send();
return xhr.responseText;
}

//Here I get the JS content and execute it
var rpt = _curl('https://my-page.com/remote.js').match(/\){([^]+)}/)[1];
jQuery.globalEval(rpt); //This works now

关于javascript - chrome扩展无法读取未定义的属性 'currentScript',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34216585/

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