Прокси-вызовы с использованием XMLHttpRequest в пользовательском скрипте / расширении

У меня возникли проблемы с патчированием XMLHttpRequest в моем пользовательском скрипте. Интересно, что если я открою консоль и скопирую содержимое скрипта, строка Intercepted будет напечатана в консоли.

Это почему? Есть какая-то песочница? Если есть, будет ли работать обходной путь, как следует?

В пользовательском сценарии выберите и добавьте другой файл JS в DOM, который выполняет переопределение.

Код для воспроизведения:

Пустышка HTML:

<html>

<head>
    <script
  src="https://code.jquery.com/jquery-3.2.1.js"
  integrity="sha256-DZAnKJ/6XZ9si04Hgrsxu/8s717jcIzLy3oi35EouyE="
  crossorigin="anonymous"></script>
    <script>
        function make_request() {
            console.log('making req');
            $.getJSON("https://jsonplaceholder.typicode.com/users", function(data, status){
                var str_result = JSON.stringify(data);
                console.log('Got ' + str_result);
                $('#content').text(str_result);
            });
        }
        make_request();
    </script>
</head>
<body>
    <button id="btn" onclick="make_request()">Click me</button>
    <div id="content"></div>
</body>
</html>

Пользовательский скрипт:

// ==UserScript==
// @name        Test script
// @version     0.0.1
// @author      me
// @description some desc
// @matches     localhost:8000
// @run-at      document-end
// ==/UserScript==

function modifyResponse(response) {
    if (this.readyState === 4) {
        console.log('Intercepting');
    }
}

console.log('Script loaded');

(function(open) {
    XMLHttpRequest.prototype.open = function() {
        this.addEventListener("readystatechange", modifyResponse);
        open.apply(this, arguments);
    };
})(XMLHttpRequest.prototype.open);

Чтобы проверить это, запустите python -m SimpleHTTPServer 8000 в папке с HTML.

0 ответов

Другие вопросы по тегам