【发布时间】:2015-12-11 05:15:07
【问题描述】:
我在我的 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 内容在页面内执行请求,这很有效。只是每当我尝试在我的扩展程序中执行相同的代码时,它就会弹出此错误
【问题讨论】:
-
这段代码通常是可疑的(同步 XHR?eval?),但重要的部分是:你试图在扩展的哪个部分运行它,为什么它必须是远程脚本?
-
你必须知道
eval()函数不能在谷歌浏览器扩展中使用。它被认为是不安全的调用,会抛出异常。 -
@Xan 它基本上是一个插件,它依赖于远程javascript文件中定义的函数进行计算。如果没有他们的 JS 文件中的函数,代码是无用的。这解释了远程脚本的用途。有没有更好的办法?我正在尝试在内容脚本中运行它。
-
@EmrysMyrooin 我知道这是完全不安全的,不推荐。相信我,我也在努力避免它。但是我应该如何在远程 JS 文件中执行一个函数呢?还有其他方法吗?注意远程JS是绝对必要的。我没有办法避免它
-
@Emrys,这是 FUD,也可以安全地在扩展中使用 eval / remote 代码。
标签: javascript ajax google-chrome google-chrome-extension