【问题标题】:"SECURITY_ERR: DOM Exception 18" is thrown when chrome extension use "EventSrouce" is initialized初始化 chrome 扩展使用“EventSrouce”时抛出“SECURITY_ERR: DOM Exception 18”
【发布时间】:2023-04-09 05:04:01
【问题描述】:

我正在使用 HTML5 服务器发送事件来发布服务器的某些状态。我正在实现一个 chrome 扩展来跟踪状态,并在需要时通知用户。

但是当我尝试创建 EventSource 对象时 Chrome 抛出异常“Uncaught Error: SECURITY_ERR: DOM Exception 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"
]

但是权限并不能真正解决问题! 有什么想法吗?

【问题讨论】:

  • 您的页面托管在哪个 URL 上?是不同的端口吗?
  • 我不确定他们如何处理端口,但您的 match pattern 应该是 http://localhost:3000/* 才能工作。 但是,我认为调用本地运行在机器上的进程甚至不需要此权限(请参阅this question),因此我认为问题可能出在您的代码上。不幸的是,我对这个新 API 知之甚少,因此无法真正提供帮助。

标签: javascript html google-chrome google-chrome-extension xss


【解决方案1】:

这看起来像是通过 file:// 协议加载的 HTML 文件出现 Same Origin Policy 问题,试图通过 http:// 协议联系服务器。

这里是an article,描述了如何绕过您的开发环境的 SOP。

当您投入生产时,我的理解是 google chrome 提供了某些方法来绕过通常施加于浏览器的常见 SOP 限制。这可能是通过您提到的permissions JSON 实现的,但是我对 Chrome 扩展还不够熟悉,无法确定。

啊,等一下,this article 可能有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 2019-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多