Переопределение прототипа XMLHttpRequest не вызывается - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь написать расширение для Chrome, чтобы отслеживать ответ XHR для определенного веб-сайта и записывать сообщения в консоль на основе содержимого ответа.Пока я просто пытаюсь получить ответ, но пока не удалось.

Вот мой manifest.json файл:

{
    "name": "XHR Listener",
    "version": "0.0.1",
    "manifest_version": 2,
    "description": "Listening in on XHR responses",
    "background": {
        "scripts": ["background.js"],
        "persistent": true
    },
    "browser_action": {
        "default_title": "Listen!"
    },
    "permissions": [
        "https://*/*",
        "http://*/*"
    ]
}

Вот мой background.js файл:

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.executeScript(tab.ib, {
        file: 'inject.js'
    });
});

А вот мой inject.js файл:

console.log('In inject.js');
(function() {
    console.log('In the function()');
    const dummySend = XMLHttpRequest.prototype.send;
    XMLHttpRequest.prototype.send = function () {
        console.log('inside send()');
        const _onreadystatechange = this.onreadystatechange;

        this.onreadystatechange = function () {
            console.log('inside onreadystatechange()');
            if (this.readyState === 4 && this.status === 200) {
                console.log(this.response);
            }
        }
        if (_onreadystatechange) {
            _onreadystatechange.apply(this, arguments);
        }
    }
    dummySend.apply(this, arguments);
})();

Когда я нажимаю на значок расширения, я получаю «In inject.js» и «In function ()»сообщения в консоли, но другие сообщения («Inside send ()» и «Inside onreadystatechange ()») никогда не регистрируются в консоли, даже если на вкладке «Сеть» инструментов разработчика отображаются многочисленные действия HMLHttpRequest.Что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...