Я пытаюсь перехватить все запросы XMLHttpRequest с моим расширением, и в настоящее время я могу сделать это в некоторой степени, но он не работает полностью. Я знаю о веб-запросах, но это не позволяет мне редактировать данные публикации / получения в отличие от текущего кода ниже. Я могу запустить этот код
Inject. js
(function(){
console.log("Injected Send")
var proxiedSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
console.log(this, arguments );
return proxiedSend.apply(this, [].slice.call(arguments));
}
})();
(function(){
console.log("Injected Open")
var proxiedOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
console.log(this, arguments );
return proxiedOpen.apply(this, [].slice.call(arguments));
};
})();
Внутри моего скрипта содержимого, и он будет регистрировать «Injected Send» и «Injected Open». Я проверил этот код, и он ведет себя странно.
Если вы запустите этот код ниже в консоли, вы увидите, что он работает при перехвате запроса, но не будет работать ни с какими XMLHttpRequests, запущенными на странице (старые и новые объекты). Он будет только перехватывать XMLHttpRequests, сделанные в консоли. Другой пример - это https://www.w3schools.com/code/tryit.asp?filename=GBUKE1JS7IFL. Это работает на веб-странице, но я не могу получить то же поведение, вводя его с расширением.
(function(){
console.log("Injected Send")
var proxiedSend = window.XMLHttpRequest.prototype.send;
window.XMLHttpRequest.prototype.send = function() {
console.log(this, arguments );
return proxiedSend.apply(this, [].slice.call(arguments));
}
})();
(function(){
console.log("Injected Open")
var proxiedOpen = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function() {
console.log(this, arguments );
return proxiedOpen.apply(this, [].slice.call(arguments));
};
})();
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log("success")
}
};
xhttp.open("GET", "/", true);
xhttp.send();
Эта проблема приводит к тому, что мой Inject. js не работает.
манифест. json
{
"name": "test",
"version": "0.0.1",
"manifest_version": 2,
"description": "testing xmlhttprequests",
"homepage_url": "http://example.com",
"icons": {
"16": "icons/icon16.png",
"48": "icons/icon48.png",
"128": "icons/icon128.png"
},
"default_locale": "en",
"background": {
"scripts": [
"src/bg/background.js"
],
"persistent": true
},
"page_action": {
"default_icon": "icons/icon19.png",
"default_title": "page action demo",
"default_popup": "src/page_action/page_action.html"
},
"permissions": [
"tabs",
"*://*.google.com/"
],
"content_scripts": [
{
"matches": [
"https://*/*",
"http://*/*"
],
"run_at": "document_start",
"js": [
"src/inject/inject.js"
]
}
]
}