Chrome扩展程序的内容脚本中出现XSS“使用访问跨域框架阻止了具有原始框架的框架”错误

时间:2019-04-09 00:18:53

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

我已经在Google Chrome商店中使用此扩展程序已有一段时间了。完成维护更新后,我注意到content.js(内容脚本)的以下行:

//Get top document URL (that is the same for all IFRAMEs)
var strTopURL = window.top.document.URL;

现在,当加载的页面中包含IFRAME时,将引发以下异常:

  

阻止了原点为“ https://www.youtube.com”的框架访问   跨域框架。

就像我说的那样,它曾经是从您的扩展名(从content script)获得顶级文档URL的方式。那么现在可以接受的方式是什么?

PS。再次,我说的是Google Chrome扩展程序(而不是页面上的常规JS。)

编辑:该脚本在content_scripts的{​​{1}}下运行,该脚本的定义如下:

manifest.json

1 个答案:

答案 0 :(得分:1)

内容脚本应要求您的后台脚本通过消息传递来做到这一点:

chrome.runtime.sendMessage('getTopUrl', url => {
  // use the URL here inside the callback or store in a global variable
  // to use in another event callback that will be triggered in the future
  console.log(url);
});
// can't use it right here - because the callback runs asynchronously

background script应该在manifest.json中声明:

"background": {
  "scripts": ["background.js"],
  "persistent": false
},

您还需要manifest.json中需要特定的URL权限或允许所有URL:

"permissions": ["<all_urls>"]

还有后台脚本中的侦听器:

chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => {
  if (msg === 'getTopUrl') {
    chrome.tabs.get(sender.tab.id, tab => sendResponse(tab.url));
    // keep the message channel open for the asynchronous callback above
    return true;
  }
});