Изменить расположение URL в расширениях Chrome и остановить первоначальный запрос - PullRequest
7 голосов
/ 12 сентября 2011

Я сделал расширение, целью которого является перенаправление URL. Т.е.: www.google.com становится: www.mysite.com/?url=www.google.com

Я наткнулся на этот пост: Как изменить текущее местоположение URL в Chrome с помощью расширений

Проблема в том, что оба URL обрабатываются. Изначально вкладка загружает google.com и только после ее завершения отображается мой запрос (www.mysite.com/?url=www.google.com). Есть ли способ остановить обработку исходного запроса?

Что-то вроде:

   chrome.tabs.onUpdated.addListener(function(tabId,obj,tab){
    update.stop() // ??????????? Here I'm missing...
    chrome.tabs.update(tabId,{url:....}, function callback); // My update stuff..
   });

Мысли

спасибо всем.

Ответы [ 2 ]

7 голосов
/ 13 сентября 2011

Вы ищете API веб-навигации .

Вы можете зарегистрировать слушателей для обработки пользовательской навигации, изменив или заблокировав запрос на лету.

В приведенном ниже примере, когда пользователь переходит на www.google.com, перед тем, как страница даже начнет загружатьсяonBeforeNavigate запущен, и вы можете перенаправить пользователя на страницу проверки CSS для этого URL:

chrome.webNavigation.onBeforeNavigate.addListener((details) => {
    if(details.url.indexOf("www.google.com") !== -1)) {
        chrome.tabs.update(details.tabId, {
            url: "https://jigsaw.w3.org/css-validator/validator?uri=" + details.url
        });
    }
});

Не забудьте добавить разрешение "webNavigation" в свой манифест расширения, чтобы получить этофункциональность включена.

0 голосов
/ 12 сентября 2011

chrome.tabs.onUpdated запускается два раза за загрузку вкладок - один раз, когда вкладка начинает загружаться, и в другой раз, когда она заканчивает загрузку.Если вы прикрепите свое обновление к событию начала загрузки вкладки, то оно должно работать относительно быстро.Вы по-прежнему увидите, что исходный URL-адрес загружается на короткое время, но он не будет ждать его завершения, как вы описываете.

chrome.tabs.onUpdated.addListener(function(tabId,obj,tab){
    if(obj.status == "loading") {
        chrome.tabs.update(tabId,{url:....}, function callback); 
    }
});

Я не думаю, что есть более эффективное решение вмомент.

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