Javascript XSS";阻止具有原点的帧访问交叉原点帧“;Chrome扩展的内容脚本出错
我已经在谷歌Chrome商店有一段时间了。在进行维护更新后,我注意到Javascript XSS";阻止具有原点的帧访问交叉原点帧“;Chrome扩展的内容脚本出错,javascript,google-chrome,google-chrome-extension,xss,Javascript,Google Chrome,Google Chrome Extension,Xss,我已经在谷歌Chrome商店有一段时间了。在进行维护更新后,我注意到content.js(内容脚本)中的以下行: 当加载的页面中有IFRAME时,正在引发以下异常: 阻止原点为“”的帧访问 交叉原点框架 正如我所说的,它曾经是为您的扩展获取顶级文档URL的方法(从内容脚本)。那么现在公认的做法是什么呢 另外,我说的是谷歌浏览器的扩展(而不仅仅是页面上的普通JS) 编辑:此脚本在manifest.json中的content\u脚本下运行,定义如下: "content_scripts": [
content.js
(内容脚本)中的以下行:
当加载的页面中有IFRAME
时,正在引发以下异常:
阻止原点为“”的帧访问
交叉原点框架
正如我所说的,它曾经是为您的扩展获取顶级文档URL的方法(从内容脚本
)。那么现在公认的做法是什么呢
另外,我说的是谷歌浏览器的扩展(而不仅仅是页面上的普通JS)
编辑:此脚本在manifest.json
中的content\u脚本下运行,定义如下:
"content_scripts": [
{
"run_at": "document_end",
"all_frames" : true,
"match_about_blank": true,
"matches": ["http://*/*", "https://*/*"],
"js": ["content.js"]
}
],
内容脚本应要求您的背景脚本通过消息传递来执行此操作:
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
应在manifest.json中声明:
"background": {
"scripts": ["background.js"],
"persistent": false
},
您还需要manifest.json中的特定URL权限或允许所有URL:
"permissions": ["<all_urls>"]
嗯,这是很大的变化。我想知道我是否可以使用document.referer
来代替?另外,我不需要后台脚本使用它。我是从清单中运行在content\u scripts
下的.js
脚本调用它的。(我会更新问题的细节。)推荐人可能缺席,你的iframe可能比第二级更深。至于第二个反对意见,我不明白问题出在哪里,我不这么认为。好的,谢谢。我想我应该尝试一下,如果它在content.js
和你建议的background.js
中也有效的话。(如果我没记错的话,它们是在不同的权限下运行的。)chrome.tabs在内容脚本中不可用,这就是为什么需要后台脚本的原因。我仍然不明白为什么这是一个问题。谷歌改变了很多与权限相关的东西,这不是一个简单的改变。
"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;
}
});