2013-09-08 9 views
7

Abbrechen Ich bin meine Frage aus Chromium-Erweiterungen Google Group hier erneut posten.Wie stillschweigend WebRequest in Chrome-Erweiterung

In meiner Erweiterung möchte ich einige WebRequests basierend auf URL-Muster abbrechen. Mein Problem ist, dass, wenn ich {cancel: true} in der onBeforeRequest Ereignis Listener zurückgeben, der Browser würde umleiten zu einer Seite, die mir sagt, dass die Anfrage von einer Erweiterung blockiert wird. Aber ich möchte die Anfrage stillschweigend abbrechen (da nichts passiert ist).

Ich habe auch versucht {redirectUrl: „“} zurückzukehren im onBeforeRequest Ereignis-Listener, würde die Konsole einen Fehler melden Sie sagen, dass „“ keine gültige URL war, und eine Bar erschien am unteren Ende der Browser sagt "Wartet auf Erweiterung". Um diese Leiste zu schließen, führe ich dann das Inhaltsskript "window.stop()" auf dieser Webseite aus. Das funktioniert manchmal, aber nicht immer. Ich frage mich also, ob jemand eine bessere Lösung hat. Vielen Dank!!

+1

'hat {redirectUrl: "javascript:"}' helfen? – OneOfOne

+0

Danke für die schnelle Antwort. Ich habe es versucht, und es funktioniert !! Hätte nie gedacht, dass es so einfach sein könnte. – Jun

+0

@Jun Wie wäre es, die angenommene Antwort zu ändern? – aaaaaaaaaaaa

Antwort

15

Sie sollten "javascript:" verwenden url statt:

{ 
    redirectUrl:"javascript:" 
} 
+1

Funktioniert perfekt..Danke für diese kurze und perfekte Antwort. Ich benutzte dies in meiner Chrome-Erweiterung (Requestly), um die Anfragen zu blockieren. https://chrome.google.com/webstore/detail/requestly/mdnleldcmiljblolnjhpnblkcekpdkpa – sachinjain024

6

Umleiten zu einer Seite, die mit HTTP-Statuscode 204 antwortet, z. https://robwu.nl/204Dies ist meine Website, und ich protokolliere keinen Datenverkehr zu dieser URL.

The specification verlangt das folgende Verhalten auf eine Antwort mit HTTP-Status 204:

Wenn der Kunde ein User-Agent ist, sollte es nicht aus, dass seine Dokumentansicht ändern, die die Anforderung gesendet werden, verursacht. Diese Antwort soll in erster Linie die Eingabe von Aktionen ermöglichen, ohne eine Änderung an der aktiven Dokumentansicht des Benutzeragenten zu verursachen, obwohl jede neue oder aktualisierte Metainformation auf das Dokument angewendet werden sollte, das sich derzeit in der aktiven Sicht des Benutzeragenten befindet. Hier

ist ein einfaches Beispiel, eine Erweiterung, die schweigend blockiert alle Anfragen an 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']); 

Dieses Beispiel leitet auf http://robwu.nl/204 oder https://robwu.nl/204 auf die Anträge der Regelung abhängig, gemischtem Inhalt Warnungen zu vermeiden.

Damit dieses Beispiel funktioniert, müssen Sie die webRequest-, webRequestBlocking- und Hostberechtigungen für die Site in der Manifestdatei deklarieren.

+0

Danke für die schnelle Antwort. Ich habe diese Methode ausprobiert, es funktioniert genau so, wie ich es möchte. Das ist wirklich sauber und schlau. – Jun

+0

@ rob-w das ist eine gute Antwort, können Sie bitte einen Grund, wie Sie es auf dem Server behandeln, nicht, dass ich nicht vertrauen, verwenden Sie, ich, aber ich werde versuchen, mit einem lokalen nativen Kreuz -Plattform-Server, sollte es eine höhere (niedrigere) Latenz haben und ich benutze sowieso einen nativen Client und Messaging. – wesam

3
return {redirectUrl: 'javascript:void(0)'};