【问题标题】:Blocked a frame with origin chrome-extension from accessing a cross-origin frame阻止具有原始 chrome-extension 的框架访问跨域框架
【发布时间】:2020-12-30 12:00:00
【问题描述】:

我正在尝试通过 background.js 将来自内容脚本的消息传递到我在 chrome 扩展中的 background.js 中弹出的窗口,但引用了我在 background.js 中弹出的窗口,在 background.js 的事件处理程序中,会导致跨域权限问题。

这是有问题的 background.js 代码:

// background.js
var win;

chrome.browserAction.onClicked.addListener(function (tab) {
  win = window.open('popup.html', '', 'width=1530px,height=950px');
  
  // listen to messages from inject.js
  chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {
    console.log(win); // Any reference to "win" causes the error
  });
  
  chrome.tabs.executeScript(tab.id, {file: 'jquery-latest.min.js'});
  chrome.tabs.executeScript(tab.id, {file: 'inject.js'});
});

我从 background.js 收到此错误:

事件处理程序中的错误:错误:阻止具有来源“chrome-extension://apjalhbpkiomjnmiilehodbmfcebfiib”的框架访问跨域框架。 在控制台.log () 在 chrome-extension://apjalhbpkiomjnmiilehodbmfcebfiib/background.js:10:13

似乎仅仅引用变量win导致了跨源问题,我不明白,因为我在background.js中声明了win并在background.js中引用了它,尽管是在事件处理程序中。

这是一个重复问题的最小扩展(错误将出现在后台页面的控制台中):https://www.dropbox.com/sh/8ge0v398xzq04th/AACqjNH4h9QS_LaPwCZYK-iwa?dl=0

【问题讨论】:

  • popup.html 扩展的一部分
  • 是的,它在同一个解压目录中。窗口打开并成功渲染。

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


【解决方案1】:

这似乎是因为弹出窗口在清单中被沙盒化了。如果窗口没有被沙盒化,它就不会发生。也许这是https://groups.google.com/a/chromium.org/g/chromium-apps/c/YGLdHCAfOiU?pli=1 报告的错误 您应该能够使用 postMessage 发送到沙盒窗口。 我想对弹出窗口进行沙箱处理,因为我想在那里使用 plotly,它使用函数构造函数,这被认为是不安全的 eval。

【讨论】:

    猜你喜欢
    • 2015-07-11
    • 2014-09-25
    相关资源
    最近更新 更多