2013-09-08 10 views
7

Powtórne opublikowanie mojego pytania z grupy Chromium-extensions google tutaj.Jak anulować webRequest po cichu w rozszerzeniu chrome

W moim rozszerzeniu chcę anulować niektóre webRequests na podstawie wzorca URL. Mój problem polega na tym, że jeśli zwrócę {cancel: true} w detektorze zdarzeń, to przeglądarka przekieruje mnie na stronę informującą, że żądanie jest blokowane przez jakieś rozszerzenie. Ale chcę po cichu anulować żądanie (ponieważ nic się nie stało).

Próbowałem również, aby powrócić {redirectUrl: „”} w przypadku słuchacza onBeforeRequest, konsola będzie zalogować się błąd mówiąc, że „” nie był prawidłowy adres URL, a pasek pojawił się na dole przeglądarkę, mówiąc "Oczekiwanie na rozszerzenie". Aby zamknąć ten pasek, uruchamiam skrypt "window.stop()" na tej stronie. To działa czasami, ale nie zawsze. Zastanawiam się, czy ktoś ma lepsze rozwiązanie. Dzięki!!

+1

ma '{redirectUrl: "javascript:"}' pomóc? – OneOfOne

+0

Dzięki za szybką odpowiedź. Próbowałem tego i działa! Nigdy nie myślałem, że to może być takie proste. – Jun

+0

@Jun Jak zmienić akceptowaną odpowiedź? – aaaaaaaaaaaa

Odpowiedz

15

Należy użyć "javascript:" url Zamiast:

{ 
    redirectUrl:"javascript:" 
} 
+1

Działa doskonale. Dzięki za tę krótką i idealną odpowiedź. Użyłem tego w moim rozszerzeniu chrome (Requestly), aby zablokować żądania. https://chrome.google.com/webstore/detail/requestly/mdnleldcmiljblolnjhpnblkcekpdkpa – sachinjain024

6

Przekieruj na stronę, na którą odpowiada kod stanu HTTP 204, np. https://robwu.nl/204To jest moja strona internetowa i nie rejestruję żadnego ruchu do tego adresu URL.

The specification żąda następujące zachowanie na odpowiedź ze stanu HTTP 204:

Jeśli klient jest aplikacja kliencka, powinna zmienić swój pogląd NIE dokumentu z tym, co spowodowało, że prośba powinna być wysłana. Ta odpowiedź ma przede wszystkim umożliwić wprowadzanie danych do akcji, bez powodowania zmiany w widoku aktywnego dokumentu użytkownika, chociaż każda nowa lub zaktualizowana metainformacja POWINNA być zastosowana do dokumentu znajdującego się obecnie w aktywnym widoku klienta użytkownika.

Oto prosty przykład, że rozszerzenie cichu blokuje wszystkie żądania do YouTube:

chrome.webRequest.onBeforeRequest.addListener(function(details) { 
    var scheme = /^https/.test(details.url) ? 'https' : 'http'; 
    return { redirectUrl: scheme + '://robwu.nl/204' }; 
}, { 
    urls: ['*://www.youtube.com/*'] // Example: Block all requests to YouTube 
}, ['blocking']); 

Przykład ten przekierowuje do http://robwu.nl/204 lub https://robwu.nl/204 zależności od programu wniosków, w celu uniknięcia ostrzeżeń mieszanych treści.

Aby ten przykład zadziałał, należy zadeklarować w pliku manifestu uprawnienia webRequest, webRequestBlocking i hosta dla witryny.

+0

Dzięki za szybką odpowiedź. Próbowałem tej metody, działa dokładnie tak, jak chcę. To jest naprawdę czyste i inteligentne. – Jun

+0

@ rob-w to jest świetna odpowiedź, czy możesz opublikować informacje o tym, jak sobie z tym radzisz na serwerze, nie, że nie ufam używaniu twojego, ale chcę spróbować z lokalnym rodzimym krzyżem Platforma http serwera, powinna mieć wolniejszą kolejność niższego opóźnienia, a ja i tak używam rodzimego klienta i komunikatora. – wesam

3
return {redirectUrl: 'javascript:void(0)'}; 
Powiązane problemy