Opera User-JS: как мне получить необработанный ответ сервера? - PullRequest
2 голосов
/ 09 декабря 2010

Я пишу какой-то пользовательский 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?

1 Ответ

0 голосов
/ 22 декабря 2010

Нет никакого способа получить доступ к предварительно проанализированной разметке из JS. Единственный способ сделать это - использовать XMLHttpRequest для запроса контента самостоятельно.

...