Создайте Firefox-аддон, чтобы исправлять сломанную веб-страницу на лету
На моей работе они используют средство "централизованного входа" на внутренние веб-страницы. Всякий раз, когда внутренняя веб-страница требует аутентификации, она перенаправляет вас в центральный логин, и после входа в систему он отправляет вас обратно на страницу, которую вы пытаетесь просмотреть.
Самая первая строка в HTML для этой центральной страницы входа начинается с этого:
<!-- Encoding=ISO-8859-1;
Но это никогда завершает комментарий, а это означает, что весь HTML-код во всем документе фактически закомментирован. Это отлично работает в IE6 (который является стандартом компании - eek!), И он работал в Firefox, но когда я обновился до Firefox 4, это больше не работает (как и не должно - это следующие стандарты).
Я сохранил источник и изменил первую строку на:
<!-- Encoding=ISO-8859-1; -->
И тогда будет отображаться страница, но поскольку она загружается из file:///
, я не могу отправить свои учетные данные на главный сервер...
Я ненавижу использование IE6, но для всех внутренних страниц я застрял в нем, потому что Firefox делает пустую страницу каждый раз, когда я отправляюсь в центральный логин.
Возможно ли создать аддон Firefox (или даже Greasemonkey script), чтобы изменить HTML, когда он входит в браузер, прежде чем он будет отображаться? Я вижу множество примеров модификации HTML, когда он уже загружен, но не может найти что-либо, чтобы манипулировать при загрузке.
Я думаю, что я открыт для других решений, кроме аддона, но это единственное, о чем я мог подумать. Кроме того, нам запрещено использовать Chrome или Safari, так что это невозможно. И нет, я не могу поговорить с ответственным за центральную страницу входа и заставить их изменить ее. Проксирование, вероятно, будет очень сложно также из-за характера страницы.
Спасибо заранее!
Ответы
Ответ 1
Может быть, для этого можно использовать локальный Apache с mod_proxy и mod_subsitute? Выведенный из примера из berkek.com:
<VirtualHost *>
ServerAdmin [email protected]
ServerName www.yourcompany.com
<Proxy *>
Order deny,allow
</Proxy>
ProxyRequests on
ProxyPass / http://www.yourcompany.com/
ProxyPassReverse / http://www.yourcompany.com/
AddOutputFilterByType SUBSTITUTE text/html
Substitute "s|<!-- Encoding=ISO-8859-1;|<!-- Encoding=ISO-8859-1; -->|n"
</VirtualHost>
Ответ 2
Вот метод, который я нашел:
Fiddler Web Debugging Proxy. Это в основном делает то, что предложил @Tatu Lahtela и что @alex , только без apache.
Вот шаги, которые я сделал:
- Загрузить и установить Fiddler
- Запустить Fiddler, который прослушивает порт 8888 (по умолчанию)
- В параметрах Fiddler (вкладка HTTPS) установите флажок "Расшифровать протокол HTTPS"
- В Fiddler нажмите меню "Правила", затем "Настроить правила".
-
В текстовом редакторе я нашел функцию OnBeforeResponse
и добавил этот код:
if (oSession.oResponse.headers.ExistsAndContains("Content-Type", "html")){
// Remove any compression or chunking
oSession.utilDecodeResponse();
var oBody = System.Text.Encoding.UTF8.GetString(oSession.responseBodyBytes);
var oRegEx = /<!-- Encoding=ISO-8859-1; /gi;
oBody = oBody.replace(oRegEx, "<!-- Encoding=ISO-8859-1; -->");
oSession.utilSetResponseBody(oBody);
}
-
В Fiddler на вкладке Инструменты- > Параметры- > Подключения щелкните "Копировать URL-адрес прокси-сервера браузера" (это файл PAC-прокси, о котором упоминал @Tatu Lahtela).
- В Firefox, Tools- > Options- > Advanced Tab- > Network Tab- > Settings, проверьте URL-адрес автоматической настройки прокси-сервера и вставьте URL-адрес с шага # 6.
- Погрузитесь в сеть!
Я изменил файл PAC, чтобы ограничить сайты, которые попадали на Fiddler, как предложил @Tatu Lahtela.
Это работает для меня, с минимальной настройкой. Дополнение Firefox было бы лучше для меня, так как мне не пришлось бы использовать внешнюю программу, но создание одного для этого кажется довольно сложным.
Спасибо всем, кто помог! Я буду отмечать @Tatu Lahtela ответ как принятый ответ, так как именно так я смог найти то, что мне было нужно.
Ответ 3
Каковы ваши причины не использовать прокси?
Apache httpd + mod_proxy + mod_ext_filter должен легко решить ваши проблемы; вы используете mod_ext_filter для подключения программы, которая будет исправлять страницу (должна выполняться небольшая оболочка script).
Ответ 4
Вы можете сделать это в аддоре Firefox, но это довольно много работы. http://www.softwareishard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/ показывает вам, что делать, за исключением того, что вместо того, чтобы просто принимать входящие данные, хранить их в массиве и отправлять обратно на originalListener
, вам необходимо отправить измененные данные (в вашем случае данные с добавлением -->
) в originalListener
.