Javascript 是什么导致EventSource在我的Chrome扩展中触发错误?
我在Google 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
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,但响应的
头不是“文本/事件流”内容类型
- 发生重定向,导致一个先前的条件
您可能已经添加了
”http://www.janywer.freetzi.com/*“
对清单文件的权限,导致初始请求通过。此页面重定向到其他域(不带www前缀)。您可能尚未将此域添加到清单文件中,因此Chrome会尝试启用CORS的请求。未收到预期的标头,因此Chrome将中止请求
这可以通过两种方式解决:
- 将所有涉及的域添加到您的文件中,例如
(请参见Chrome扩展文档中的)"permissions": [ "http://www.janywer.freetzi.com/*", "http://janywer.freetzi.com/*" ]
- 或者让服务器使用预期的CORS头进行回复。在PHP中:
这允许任何页面访问您的URL。要仅限制对扩展的访问,请使用:header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Origin: chrome-extension://EXTENSION ID HERE");