Как я могу перенаправить хром в расширение при посещении данного URL?
Например: когда я посещаю http://yahoo.com/
, я хочу, чтобы он перенаправлялся на http://google.com/
Как я могу перенаправить хром в расширение при посещении данного URL?
Например: когда я посещаю http://yahoo.com/
, я хочу, чтобы он перенаправлялся на http://google.com/
Есть много вариантов, один из которых сложнее, чем другой.
webRequest
API, в частности onBeforeRequest
event. (Еще лучше, предстоящий declarativeWebRequest
API).location.replace('http://example.com')
на странице.tabs
API. Используйте onUpdated
событие, чтобы определить, когда страница изменила его местоположение, и chrome.tabs.update
, чтобы изменить его URL. Избегайте бесконечного цикла!Первый из них самый лучший, потому что он активирован до того, как страница будет запрошена. Второй может быть активирован после выполнения запроса, но до того, как страница будет отображена ("run_at":"document_start"
) или после ее отображения ("run_at":"document_end"
). Я упомянул последний для полноты, но вы не должны его использовать, потому что другие варианты лучше.
Вот пример использования API webRequest
, простого расширения, которое позволяет мне просматривать страницы в заливе Пират, хотя главные хосты сняты моим провайдером (фактический список URL-адресов намного длиннее, но я опустили их для примера).
См. шаблоны соответствия для объяснения в форматах URL.
manifest.json
{
"name": "The Pirate Bay",
"description": "Redirect The Pirate Bay to a different host",
"version": "1.0",
"manifest_version": 2,
"background": {"scripts":["background.js"]},
"permissions": [
"webRequest",
"*://thepiratebay.se/*",
"*://www.thepiratebay.se/*",
"webRequestBlocking"
]
}
background.js
var host = "http://tpb.pirateparty.org.uk";
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {redirectUrl: host + details.url.match(/^https?:\/\/[^\/]+([\S\s]*)/)[1]};
},
{
urls: [
"*://piratebay.se/*",
"*://www.piratebay.se/*"
],
types: ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
},
["blocking"]
);
Я знаю, что немного опоздал в игре, чтобы ответить на этот вопрос. Тем не менее, я бы хотел ответить на этот вопрос для будущих читателей. Посмотри на
В настоящее время Вы можете настроить правила для
Скриншоты для лучшего понимания:
В "дорожной карте" есть много вещей, которые можно
.. и многое другое.
PS: я создал это, так что вы можете обвинить меня, если вы не найдете это полезным :)
Есть ли способ запустить удалить addListener и дать доступ пользователю после выполнения действия