我正在尝试开发一个简单的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()
执行此操作时,就好像之后一切都被删除了脚本被执行。我知道这可能非常简单,但我无法解决这个问题。提前感谢每一个提示
答案 0 :(得分:0)
这样的事情让我前一天疯了。读一读:
隔离世界允许每个内容脚本对其JavaScript环境进行更改,而不必担心与页面或其他内容脚本冲突。例如,内容脚本可以包含JQuery v1,页面可以包含JQuery v2,它们不会相互冲突。 https://developer.chrome.com/extensions/content_scripts
您的代码不会与页面中的代码进行交互,因此您在扩展代码中覆盖跨域请求方法将对页面使用的方法无效。