Chrome.tabs.executeScript()和文件包含

时间:2016-03-23 23:54:14

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

我正在尝试开发一个简单的Chrome扩展程序,我需要在其中聆听'在页面内进行的各种AJAX调用。

这是我用于监听AJAX调用的代码:

var isAjaxWorking = false;
//timeout
var timeout;

//create new AJAX listener
var s_ajax = new Object();

//rewrite send() method XMLHttpRequest
s_ajax.tempSend = XMLHttpRequest.prototype.send;

s_ajax.callback = function (event){
   isAjaxWorking = true;
   timeout = 500;//5 seconds
   var cycle = setInterval(function(){
      timeout--;
      if(timeout > 0){
         if(event.readyState === 4){
            isAjaxWorking = false;
            clearInterval(cycle);
         }
       }
       else{
        console.log('s_ajax.callback : timeout');
        clearInterval(cycle);
        isAjaxWorking = null;
      }
   },10);
}

XMLHttpRequest.prototype.send = function(a,b) {
   if (!a) var a='';
   if (!b) var b='';
   s_ajax.tempSend.apply(this, arguments);
   s_ajax.callback(this);
}

如果我直接在我想要收听的页面的控制台中注入它,它就像一个魅力,但是当我尝试使用我的chrome扩展中的chrome.tabs.executeScript()执行此操作时,就好像之后一切都被删除了脚本被执行。我知道这可能非常简单,但我无法解决这个问题。提前感谢每一个提示

1 个答案:

答案 0 :(得分:0)

这样的事情让我前一天疯了。读一读:

隔离世界允许每个内容脚本对其JavaScript环境进行更改,而不必担心与页面或其他内容脚本冲突。例如,内容脚本可以包含JQuery v1,页面可以包含JQuery v2,它们不会相互冲突。 https://developer.chrome.com/extensions/content_scripts

您的代码不会与页面中的代码进行交互,因此您在扩展代码中覆盖跨域请求方法将对页面使用的方法无效。