2013-09-08 11 views
7

Sto postando nuovamente la mia domanda dal gruppo google di estensioni Chromium qui.Come annullare webRequest in modo silenzioso nell'estensione di cromo

Nella mia estensione, desidero annullare alcune richieste Web in base al modello di URL. Il mio problema è che, se restituisco {cancel: true} nel listener di eventi onBeforeRequest, il browser reindirizza a una pagina che mi dice che la richiesta è bloccata da qualche estensione. Ma voglio solo cancellare la richiesta in silenzio (come non è successo nulla).

Ho anche cercato di tornare {redirectUrl: ""} nel listener di eventi onBeforeRequest, la console potrebbe registrare un errore dicendo che "" non era un URL valido, e un bar apparve in fondo il browser, dicendo "In attesa dell'estensione". Per chiudere questa barra, eseguo quindi lo script di contenuto "window.stop()" in quella pagina Web. Funziona a volte, ma non sempre. Quindi mi chiedo se qualcuno ha una soluzione migliore. Grazie!!

+1

fa '{redirectUrl: "javascript:"}' help? – OneOfOne

+0

Grazie per la rapida risposta. L'ho provato e funziona !! Non avrei mai pensato che potesse essere così semplice. – Jun

+0

@Jun Come cambiare la risposta accettata? – aaaaaaaaaaaa

risposta

15

Si dovrebbe usare "javascript:" url invece:

{ 
    redirectUrl:"javascript:" 
} 
+1

Funziona perfettamente ... grazie per questa risposta breve e perfetta. L'ho usato nella mia estensione chrome (Requestly) per bloccare le richieste. https://chrome.google.com/webstore/detail/requestly/mdnleldcmiljblolnjhpnblkcekpdkpa – sachinjain024

6

Reindirizzare a una pagina che risponde con il codice di stato HTTP 204, ad es. https://robwu.nl/204Questo è il mio sito web e non registro alcun traffico verso questo URL.

The specification richiede il seguente comportamento di una risposta con stato HTTP 204:

Se il client è un agente utente, non dovrebbe cambiare la sua visualizzazione del documento da quello che ha causato la richiesta da inviare. Questa risposta è intesa principalmente a consentire l'input per le azioni da eseguire senza causare una modifica alla vista del documento attivo dell'agente utente, sebbene qualsiasi metainformation nuova o aggiornata DOVREBBE essere applicata al documento attualmente nella vista attiva dell'agente utente.

Ecco un semplice esempio, un'estensione che silenziosamente blocca tutte le richieste di 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']); 

Questo esempio reindirizza a http://robwu.nl/204 o https://robwu.nl/204 a seconda del regime della gente di richieste, al fine di evitare gli avvertimenti contenuti misti.

Per far funzionare questo esempio, è necessario dichiarare le autorizzazioni webRequest, webRequestBlocking e host per il sito nel file manifest.

+0

Grazie per la rapida risposta. Ho provato questo metodo, funziona esattamente come voglio. Questo è veramente pulito e intelligente. – Jun

+0

@ rob-w questa è un'ottima risposta, puoi per favore pubblicare un esempio di come lo gestisci sul server, non che non mi fido del tuo, lo faccio, ma cercherò con una croce nativa locale -Piattaforma http, dovrebbe avere una latitudine di ordine superiore (inferiore) e io uso comunque un client nativo e la messaggistica. – wesam

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