阻止具有原始铬扩展名的框架访问跨域框架

时间:2020-09-12 01:00:06

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

我正在尝试将内容脚本中的消息通过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

1 个答案:

答案 0 :(得分:0)

这似乎是由于弹出窗口在清单中被沙箱化而发生的。如果未对窗口进行沙箱处理,则不会发生这种情况。可能是https://groups.google.com/a/chromium.org/g/chromium-apps/c/YGLdHCAfOiU?pli=1上报告的错误 您应该能够使用postMessage发送到沙盒窗口。 我想对弹出窗口进行沙盒处理,因为我想在那里使用图集,该图使用函数构造函数,这被认为是不安全的。