chrome extension无法读取属性' currentScript'未定义的

时间:2015-12-11 05:15:07

标签: javascript ajax google-chrome google-chrome-extension

我的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内容在页面内执行请求。只要我尝试在扩展程序中执行相同的代码,它就会弹出这个错误

1 个答案:

答案 0 :(得分:-1)

我没有注意到脚本是在后台页面中运行的。它始终具有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