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