Прокси-вызовы с использованием 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.