Opera User-JS: Как получить ответ на сервер RAW?
-
10-10-2019 - |
Вопрос
Я пишу несколько пользователей JS для оперы. Он реагирует по запросу, у которого нет расширения, например, /stuff/code/MyFile
, или имеет один не связан с JavaScript, например, /stuff/code/load.do
. Анкет Тип контента ответа установлен на text/html
, хотя он возвращает чистый источник JavaScript (text/javascript
) Поскольку у меня нет доступа к коду сервера, я просто должен жить с этим.
Теперь проблема в том, что я хочу отформатировать источник с номерами строк и тому подобное и отобразить его внутри оперы. Поэтому я написал несколько пользователей Js, чтобы отреагировать на AfterEvent.DOMContentLoaded
(Также попробовал AfterEvent.load
, то же самое). Он читает e.event.target.body.innerHTML
Чтобы получить доступ к телу, т.е. код JavaScript.
Одно это будет работать хорошо, если бы только источник не будет содержать HTML-tags или операторов сравнения (<,>). С тех пор, как это так, я никогда не получаю желаемую результатом. Опера, кажется, имеет некоторую внутреннюю логику для преобразования text/html
-Пответствие в свой собственный формат представления. Это включает в себя, например, CRLF после удаления HTML-tag или код между двумя «сопоставлением» <и> (операторы сравнения!) =""
После каждого слова там.
И вот где проблема.
Если я запрошу тот же URL без моего пользователя JS, а затем посмотрю источник «страницы», я вижу чистый код JavaScript, идентичный тому, что отправил сервер. И это то, к чему я хочу получить доступ.
Если я использую innerText
вместо innerHTML
, Opera выпускает HTML-tags, делая файл отличным от оригинала.
Я также пытался посмотреть outerHTML
, outerText
а также textContent
, но у них все одинаковые проблемы.
Я знаю, что опера здесь ничего не делает. Сервер говорит, что это text/html
и опера просто делает то, что обычно делает с text/html
-Кад ответа.
Поэтому мой вопрос: есть ли способ получить нетронутый ответ с пользователем JS?
Решение
Нет никакого способа получить доступ к предварительно перепущенной наценке от JS. Единственный способ сделать это - использовать Xmlhttprequest, чтобы запрашивать контент самостоятельно.