Замена содержимого вкладки Chrome без подключения к серверу - PullRequest
2 голосов
/ 29 марта 2019

Я пишу расширение для Chrome, и для определенных вкладок мне нужно:

  1. Запретить вкладке подключаться к ее URL
  2. Показать пользовательский текст на вкладке
  3. (ОБНОВЛЕНИЕ) URL вкладки, чтобы остаться прежним, предпочтительно

Пожалуйста, предложите направление, как достичь обеих целей.

Что я пробовал ... Я могу предотвратить загрузку оригинального контента:

chrome.webRequest.onBeforeRequest.addListener(...
  return {cancel: true};

Затем отображается техническая страница:

Запросы к серверу заблокированы расширением. Попробуйте отключить ваши расширения. ERR_BLOCKED_BY_CLIENT

(может быть, можно создать собственную техническую страницу?)

Но это также препятствует загрузке моего скрипта контента, и поэтому я теряю способность изменять DOM вкладки.

Без onBeforeRequest Я могу отображать пользовательский текст на вкладке с помощью скрипта содержимого, но Chrome все равно будет запрашивать исходный URL.

1 Ответ

1 голос
/ 29 марта 2019

Вместо отмены запроса путем возврата {cancel: true} перенаправьте запрос на URL-адрес, содержащий ваш пользовательский контент, вернув {redirectUrl: "..."}.

Самый простой способ сделать это - включить HTML-документ "запрос заблокирован" в ваше расширение как ресурс, доступный через Интернет . Вы можете передавать параметры в документ, используя аргументы строки запроса - они игнорируются при извлечении доступных через Интернет ресурсов, но могут быть доступны из скриптов содержимого, используя window.location.search.

Известным примером расширения, использующего этот подход, является uBlock Origin , который использует доступную в Интернете HTML-страницу document-blocked.html в качестве замены заблокированных веб-страниц.

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