Расширение Chrome, замените HTML в коде ответа, прежде чем браузер отобразит его

интересно, есть ли способ сделать что-то подобное: если я нахожусь на определенном сайте, я хочу, чтобы некоторые файлы javascript загружались непосредственно с моего компьютера (например, файл:///c:/test.js), а не с сервер.

Для этого я подумал, есть ли возможность сделать расширение, которое могло бы изменить HTML-код в ответе, который браузер получает прямо перед его отображением. Таким образом, весь процесс должен выглядеть так:

  1. запрос сделан
  2. браузер получает ответ от сервера
  3. #ответ изменен# - это та часть, когда приходит расширение
  4. браузер анализирует измененный ответ и отображает страницу с этим новым ответом.

В любом случае, это даже не должно быть расширением Chrome. Он должен просто выполнять работу, описанную выше. Он может блокировать исходный файл и обслуживать другой (DNS/прокси?) или фильтровать весь HTTP-трафик на моем компьютере и заменять определенный код другим совпадающим ответом.


person lukasz    schedule 07.06.2011    source источник


Ответы (2)


Для этого можно использовать API WebRequest. Например, вы можете добавить прослушиватель onBeforeRequest и перенаправить некоторые запросы:

chrome.webRequest.onBeforeRequest.addListener(function(details)
{
  var responseData = "<div>Some text</div>"
  return {redirectUrl: "data:text/html," + encodeURIComponent(responseData)};
}, {urls: ["https://www.google.com/"]}, ["blocking"]);

Это отобразит элемент <div> с текстом «какой-то текст» вместо главной страницы Google. Обратите внимание, что вы можете перенаправлять только на те URL-адреса, на которые разрешено перенаправлять самому веб-серверу. Это означает, что перенаправление на file:/// URL-адреса невозможно, и вы можете перенаправлять только файлы внутри вашего расширения, если они доступно в Интернете. Однако URL-адреса data: и http: работают нормально.

person Wladimir Palant    schedule 07.06.2011

В Windows вы можете использовать Proxomitron (proxomitron.info), который является локальным прокси-сервером, который может перехватывать любую страницу или файл, загружаемый в ваш браузер, и изменять его с помощью регулярных выражений (без разбора DOM), как вы хотите, до того, как он будет отображен браузер.

person Steve    schedule 06.04.2012