Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XSS";阻止具有原点的帧访问交叉原点帧“;Chrome扩展的内容脚本出错_Javascript_Google Chrome_Google Chrome Extension_Xss - Fatal编程技术网

Javascript XSS";阻止具有原点的帧访问交叉原点帧“;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": [

我已经在谷歌Chrome商店有一段时间了。在进行维护更新后,我注意到
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;
  }
});