我正在使用 HTML5 服务器发送事件来发布服务器的某些状态。我正在实现一个 Chrome 扩展来跟踪状态,并在需要时通知用户。
但是当我尝试创建 EventSource 对象时 Chrome 抛出异常“未捕获错误:SECURITY_ERR:DOM 异常 18”
var tracker = (function(url) {
var source = new EventSource(url);
var onMessage = function(e) {
console.log(e);
}
source.addEventListener('new', onMessage);
return {
source: source,
newMessage: onMessage
};
})('http://localhost:3000/dispatching');
我确实将服务器的 URL 添加到了我的扩展权限中:
"permissions": [
"http://localhost:3000/",
"tabs"
]
但是权限并不能真正解决问题! 有什么想法吗?
最佳答案
这看起来像 Same Origin Policy通过 file://
协议(protocol)加载的 HTML 文件尝试通过 http://
协议(protocol)联系服务器时出现问题。
这里是an article描述如何绕过您的开发环境的 SOP。
当您投入生产时,我的理解是 google chrome 提供了某些方法来绕过通常对浏览器施加的常见 SOP 限制。这可能是通过您提到的 permissions
JSON 实现的,但我对 Chrome 扩展还不够熟悉,无法确定。
啊,等等,this article可能有用。
关于javascript - 初始化chrome扩展使用"SECURITY_ERR: DOM Exception 18"时抛出"EventSrouce",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9784581/