6

私はGoogle Chrome拡張機能でBACKGROUND_SCRIPTに次のコードを持っている:Chrome拡張機能でEventSourceでエラーが発生する原因は何ですか?

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); 

私の問題は、以下の通りです:私は拡張子をロードするたびに、それは「エラー」と言っていますが、私は正確にトリガ何かを見つけるのですかエラー?

答えて

6

The specificationが「エラー」イベントがトリガされるためにわずか数の可能な場合、定義:

  • クロス原点要求が開始されたが、しかし予想CORSヘッダーが受信されませんでした。これには、
    • Access-Control-Allow-Originが設定されていないか、元のURLと一致しません。
    • EventSourceの2番目のパラメータ)を設定しましたが、サーバはAccess-Control-Allow-Credentials: trueで応答しませんでした。
  • ネットワークエラーが発生しました。
  • httpステータスが200,305,401,407,301,302,303または307ではありません。
  • ユーザーエージェント(ブラウザ)が接続を再確立しようとしています。
  • httpステータスは200ですが、応答のContent-Typeヘッダーは `text/event-stream 'ではありません。
  • リダイレクトが発生し、その結果1つ前の状態になりました。

CORSエラーが発生しは、Chromeは通常、コンソールに以下のメッセージをログに記録します。

のEventSourceはhttp://example.com/eventsourceをロードすることはできません。 Origin http://origin.example.comは、Access-Control-Allow-Originによって許可されていません。

何らかの理由で、リダイレクトが行われたときに何らかの理由でChromeにこのエラーが表示されません。


おそらく合格する最初の要求を引き起こし、マニフェストファイルに"http://www.janywer.freetzi.com/*"許可を追加しました。このページは別のドメインにリダイレクトされます(wwwプレフィックスなし)。このドメインをマニフェストファイルに追加していない可能性があります。そのため、ChromeはCORS対応のリクエストを試みます。予想されるヘッダーは受信されないため、Chromeはリクエストを中止します。

これは、2つの方法で解決することができます:

  • は、例えば、あなたの ファイルに関連するすべてのドメインを追加します。

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

    (Chrome拡張機能ドキュメントのmatch patternsを参照してください)

  • または予想されるCORSヘッダを持つサーバの応答をしましょう。PHPの場合:

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

    これにより、どのページからでもあなたのURLにアクセスできます。内線番号のみにアクセスを制限するには、次のように指定してください:

    ​​
関連する問題