2016-07-11 4 views
-2

Я разрабатываю расширение Google Chrome, и если пользователь переходит на сайт, который не существует, например thiswebsitedoesnotexist.com, я хочу, чтобы расширение перенаправляло их на другую страницу, определенную мной. Я не говорю о сайтах, которые дают 404 ошибки. Я имею в виду сайты, адрес DNS-сервера которых не найден, поэтому Google Chrome предоставляет вам стандартную страницу ошибок.Почему не работает window.location.href на страницах ошибок?

Я пробовал использовать window.location.href = *link*, но это не меняет веб-страницу. Как я могу обойти это? Заранее спасибо.

ответ

0

Почему не работает window.location.href на страницах с ошибками?

Потому что на самом деле вам показывают документ с URL-адресами внутренней страницы ошибок, несмотря на адресную строку с указанием предполагаемого адреса. Вы можете проверить это с помощью DevTools, проверив window.location на странице с ошибкой.

data: URL-адреса are not scriptable by Chrome extensions: отсутствие разрешения хоста позволяет вводить в них сценарии содержания.

Поэтому попытки программно вводить скрипт контента, который изменяет window.location.href (или делает console.log) потерпит неудачу из-за отсутствия разрешений и match patterns для сценариев контента в манифесте не будет применяться.

Как я могу обойти это?

Вы можете использовать chrome.tabs.update со справочной страницы, чтобы перейти от страницы с ошибкой.

Чтобы обнаружить такую ​​ошибку на исходной странице, возможно, лучше всего использовать chrome.webNavigation API, хотя также можно использовать chrome.webRequest API (осторожно с фильтрами и требуются широкие разрешения). Оба предоставят tabId, чтобы сделать это.

+0

Спасибо! Это было действительно полезно (более полезно, чем этот стюарт). У меня есть второй вопрос. Я вызываю console.log со справочной страницы, но, похоже, это не выполняется! У вас есть решение для этого? –

+0

Да, на самом деле у меня есть [решение] (http://stackoverflow.com/a/36108084/934239). – Xan