Создать аддон Firefox для исправления испорченной веб-страницы на лету - PullRequest
11 голосов
/ 11 мая 2011

На моей работе они используют функцию «центрального входа» на внутренних веб-страницах.Всякий раз, когда внутренняя веб-страница требует аутентификации, она перенаправляет вас к центральному логину, а после входа отправляет вас обратно на страницу, которую вы пытались просмотреть.

Самая первая строка в HTML для этого центрального логинастраница начинается с этого:

<!-- Encoding=ISO-8859-1;

Но это никогда не заканчивает комментарий, что означает, что весь HTML-код во всем документе фактически закомментирован.Это отлично работает в IE6 (который является стандартом компании - eek!), И раньше работало в Firefox, но когда я обновил до Firefox 4, это больше не работает (как не должно - это соответствует стандартам).

Я сохранил источник и изменил первую строку на:

<!-- Encoding=ISO-8859-1; -->

И затем страница отобразится, но, поскольку она загружена из file:///, я не могу отправить свои учетные данныена главный сервер ...

Я ненавижу использовать IE6, но для всех внутренних страниц я застрял с ним, потому что Firefox отображает пустую страницу каждый раз, когда меня отправляют на центральный логин.

Можно ли создать аддон Firefox (или даже скрипт Greasemonkey) для изменения HTML-кода по мере его поступления в браузер до его визуализации?Я вижу множество примеров изменения HTML, когда он уже загружен, но не могу найти ничего, что могло бы манипулировать при его загрузке.

Я думаю, что я открыт для других решений, кроме аддона, но это было единственное, что я мог придумать.Кроме того, нам не разрешено использовать Chrome или Safari, так что это не так.И нет, я не могу поговорить с лицом, ответственным за центральную страницу входа в систему, и заставить его изменить его.Прокси, вероятно, тоже будет очень сложным из-за характера страницы.

Заранее спасибо!

Ответы [ 4 ]

1 голос
/ 12 мая 2011

Вот метод, который я нашел:

Прокси-сервер отладки Fiddler .Он в основном делает то, что @Tatu Lahtela предложил и что @alex предложил , только без apache.

Вот шаги, которые я предпринял:

  1. Загрузите и установите Fiddler
  2. Запустите Fiddler, который прослушивает порт 8888 (по умолчанию)
  3. В опциях Fiddler (вкладка HTTPS) отметьте «Расшифровать»Блок «Трафик HTTPS»
  4. В Fiddler, нажмите «Меню правил», затем «Настроить правила».
  5. В моем текстовом редакторе я нашел функцию 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);
    }
    
  6. В Fiddler, в разделе Сервис-> Параметры-> вкладка Подключения, нажмите «Копировать URL-адрес конфигурации прокси браузера» (это PAC-файл прокси, упомянутый @Tatu Lahtela).

  7. В Firefox, Инструменты-> Параметры-> Вкладка «Дополнительно» -> Вкладка «Сеть» -> Настройки, установите флажок «URL-адрес автоматической настройки прокси-сервера» и вставьте URL-адрес с шага № 6.
  8. SurfИнтернет!

Я изменил файл PAC, чтобы ограничить количество сайтов, которые перешли на Fiddler, например @Tatu Lahtelaпредложил.

Это работает для меня, с минимальной настройкой.Аддон Firefox был бы лучше для меня, так как мне не пришлось бы использовать внешнюю программу, но ее создание для этого кажется довольно трудным.

Спасибо всем, кто помог!Я отмечу ответ @Tatu Lahtela как принятый ответ, поскольку именно так я смог найти то, что мне нужно.

1 голос
/ 11 мая 2011

Может быть, для этого можно использовать локальный Apache с mod_proxy и mod_subsitute? Получено по примеру berkek.com :

<VirtualHost *>
  ServerAdmin postmaster@yourcorp.com
  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>
0 голосов
/ 12 мая 2011

Вы можете сделать это в аддоне Firefox, но это достаточно много работы. http://www.softwareishard.com/blog/firebug/nsitraceablechannel-intercept-http-traffic/ показывает вам, что делать, за исключением того, что вместо того, чтобы просто брать входящие данные, сохранять их в массиве и отправлять обратно в originalListener, вам необходимо отправить измененные данные (в вашем случае данные с добавлением -->) к originalListener.

0 голосов
/ 11 мая 2011

По каким причинам вы не используете прокси?

Apache httpd + mod_proxy + mod_ext_filter должен легко решить ваши проблемы;Вы используете mod_ext_filter, чтобы подключить программу, которая исправит страницу (небольшой скрипт оболочки должен это сделать).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...