6

Ho il seguente codice in un BACKGROUND_SCRIPT in un'estensione di Google Chrome:Che cosa causa ad EventSource l'attivazione di un errore nell'estensione di Chrome?

var source = new EventSource("http://www.janywer.freetzi.com/events/groupshout.php"); 
source.addEventListener('message', function (e) { 
    console.log('message', e.data); 
}, false); 
source.addEventListener('open', function (e) { 
    console.log('open'); 
}, false); 
source.addEventListener('error', function (e) { 
    console.log('error') 
}, false); 

Il mio problema è il seguente: Ogni volta che caricare l'estensione, sta dicendo 'errore', ma come faccio a scoprire che cosa esattamente innescato l'errore?

risposta

6

The specification definisce solo in pochi casi possibili per l'evento "errore" da attivare, che sono:

  • Un cross-origin richiesta è stata avviata, ma le intestazioni CORS previsti non sono stati ricevuti. Ciò include:
    • Access-Control-Allow-Origin non è impostato o non corrisponde all'URL di origine.
    • È stato impostato withCredentials:true (tramite il secondo parametro di EventSource), ma il server non ha risposto con Access-Control-Allow-Credentials: true.
  • Si è verificato un errore di rete.
  • Lo stato http non è 200, 305, 401, 407, 301, 302, 303 o 307.
  • L'agente utente (browser) sta tentando di ristabilire una connessione.
  • Lo stato http è 200, ma l'intestazione Content-Type della risposta non è `text/event-stream.
  • Si è verificato un reindirizzamento, che ha provocato in uno le condizioni precedenti.

Quando si verifica un errore di CORS, Chrome di solito registrato il seguente messaggio alla console:

EventSource non può caricare http://example.com/eventsource. L'origine http://origin.example.com non è consentita da Access-Control-Allow-Origin.

Per qualche motivo, Chrome non mostra questo errore quando ha avuto luogo un reindirizzamento.


probabilmente avete aggiunto il permesso "http://www.janywer.freetzi.com/*" al file manifesto, provocando la richiesta iniziale di passare. Questa pagina reindirizza a un dominio diverso (senza prefisso www). Probabilmente non hai aggiunto questo dominio al file manifest, quindi Chrome tenta una richiesta abilitata per CORS. Le intestazioni previste non vengono ricevute, pertanto Chrome interrompe la richiesta.

questo può essere risolto in due modi:

  • aggiungere tutti i domini coinvolti al di file, ad esempio,

    "permissions": [ 
        "http://www.janywer.freetzi.com/*", 
        "http://janywer.freetzi.com/*" 
    ] 
    

    (vedi match patterns nella documentazione estensione Chrome)

  • o lasciare che la risposta del server con le intestazioni CORS attesi.In PHP:

    header("Access-Control-Allow-Origin: *"); 
    

    Ciò consente a qualsiasi pagina di accedere all'URL. Per limitare l'accesso solo a proprio interno, utilizzare:

    header("Access-Control-Allow-Origin: chrome-extension://EXTENSION ID HERE"); 
    
Problemi correlati