我正在尝试将内容脚本中的消息通过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”的框架访问跨域框架。 在console.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
答案 0 :(得分:0)
这似乎是由于弹出窗口在清单中被沙箱化而发生的。如果未对窗口进行沙箱处理,则不会发生这种情况。可能是https://groups.google.com/a/chromium.org/g/chromium-apps/c/YGLdHCAfOiU?pli=1上报告的错误 您应该能够使用postMessage发送到沙盒窗口。 我想对弹出窗口进行沙盒处理,因为我想在那里使用图集,该图使用函数构造函数,这被认为是不安全的。