Javascript 是什么导致EventSource在我的Chrome扩展中触发错误?

Javascript 是什么导致EventSource在我的Chrome扩展中触发错误?,javascript,google-chrome-extension,server-sent-events,Javascript,Google Chrome Extension,Server Sent Events,我在Google 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', funct

我在Google 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);
我的问题是:每当我加载扩展时,它都会说“error”,但我如何才能找出到底是什么触发了错误?

只定义了几个可能触发“error”事件的情况,它们是:

  • 已启动跨源请求,但未收到预期的CORS标头。这包括:
    • 访问控制允许源站
      未设置或与源站URL不匹配
    • 您已使用凭据设置了
      :true
      (通过
      EventSource
      的第二个参数),但服务器没有使用
      访问控制允许凭据:true
      进行回复
  • 发生网络错误
  • http状态不是200、305、401、407、301、302、303或307
  • 用户代理(浏览器)正在尝试重新建立连接
  • http状态为200,但响应的
    内容类型
    头不是“文本/事件流”
  • 发生重定向,导致一个先前的条件
当CORS错误发生时,Chrome通常会将以下消息记录到控制台:

无法加载EventSource。访问控制不允许原点允许原点

由于某些原因,当发生重定向时,Chrome不会显示此错误


您可能已经添加了
”http://www.janywer.freetzi.com/*“
对清单文件的权限,导致初始请求通过。此页面重定向到其他域(不带www前缀)。您可能尚未将此域添加到清单文件中,因此Chrome会尝试启用CORS的请求。未收到预期的标头,因此Chrome将中止请求

这可以通过两种方式解决:

  • 将所有涉及的域添加到您的文件中,例如

    "permissions": [
        "http://www.janywer.freetzi.com/*",
        "http://janywer.freetzi.com/*"
    ]
    
    (请参见Chrome扩展文档中的)

  • 或者让服务器使用预期的CORS头进行回复。在PHP中:

    header("Access-Control-Allow-Origin: *");
    
    这允许任何页面访问您的URL。要仅限制对扩展的访问,请使用:

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