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 如何加载其他扩展';在我的扩展名&x27;新标签页_Javascript_Google Chrome_Iframe_Google Chrome Extension_Cors - Fatal编程技术网

Javascript 如何加载其他扩展';在我的扩展名&x27;新标签页

Javascript 如何加载其他扩展';在我的扩展名&x27;新标签页,javascript,google-chrome,iframe,google-chrome-extension,cors,Javascript,Google Chrome,Iframe,Google Chrome Extension,Cors,无法将内容脚本注入具有的扩展页 chrome扩展方案 只需在iFrame中加载页面,我不想/不需要在其中加载内容脚本,这样用户就可以两全其美,或者也可以吃自己的蛋糕,我的tabs manager扩展和他们在chrome商店中的最爱 我的实验 我从另一个扩展的选项页面打开了开发工具 chrome-extension://ckkdlimhmcjmikdlpkmbgfkaikojcbjk/content/options.html 附加此HTML片段,向dom添加一个iframe <iframe

无法将内容脚本注入具有的扩展页 chrome扩展方案

只需在iFrame中加载页面,我不想/不需要在其中加载内容脚本,这样用户就可以两全其美,或者也可以吃自己的蛋糕,我的tabs manager扩展和他们在chrome商店中的最爱

我的实验 我从另一个扩展的选项页面打开了开发工具

chrome-extension://ckkdlimhmcjmikdlpkmbgfkaikojcbjk/content/options.html
附加此HTML片段,向dom添加一个iframe

<iframe src="chrome-extension://hddnkoipeenegfoeaoibdmnablmgkpip/newtab.html">
</iframe>
随后出现多条与第二条错误消息相同的信息

必须有一种安全的*方法来在另一个扩展中的页面中显示来自一个扩展的页面,这是一种适当、有效的使用, 同时,您可以拒绝工具栏扩展(还记得chrome之前的Internet Explorer工具栏吗?)

*“安全”意味着一个相对框架/窗口不能访问扩展页面的另一个相对框架的DOM或操纵它(在其中执行JS)。 (相对=子女/父母/兄弟姐妹)
Chrome已经用本机默认的pdf插件iframe实现了这一点。

我也有同样的问题!:)我得到了这个工作,只有为它设置的扩展。我用两个未打包的扩展进行了测试,所以商店里都没有。从扩展ID
omf…
,我想加载一个页面表单扩展ID
oii…

解决方案
  • omf
    中,我将
    放在我的
    popup.html
  • omf
    中,在
    popup.js
    中,我做了:

    let pc = document.getElementById('container');
    let iframe = document.createElement('iframe');
    iframe.src = "chrome-extension://oiifekahljigbmnkdacklolgniafenlj/quux.html";
    pc.appendChild(iframe);
    
    而且效果很好。
    注意我是在
    popup.html的
    onload
    之后做的-我以前没有尝试过
    onload

警告 只有当目标扩展名
oii
在其内部声明
quox.html
时,它才起作用。具体而言,
oii
具有以下部分清单:

{
  "name": "test",
  "manifest_version": 2,
  ...
  "web_accessible_resources": [
    "quux.html"
  ]
}
如果我从
oii
中的
web\u accessible\u resources
部分删除了
qux.html
,那么
omf
中的
给了我您看到的“拒绝执行”消息

调试辅助工具 有趣的是,在我的例子中,“拒绝执行”错误消息实际上是针对内置Chrome错误页面
Chrome中的脚本的-extension://invalid/
。通过手动将错误消息中的
散列值复制到
内容安全策略
omf中的清单条目中,我可以加载该页面。例如,在
omf
manifest.json
中:

"content_security_policy": "script-src 'self' 'sha256-AmiIBiDMlUtAs2tJB7jErMe/d3rBPYNUQQIZZdI0/mw=' blob: filesystem: chrome-extension-resource: ; object-src 'self'"
有多少空格分隔的
sha256
条目就有多少条错误消息。每个错误消息都与一个特定的脚本相关,并带有自己的散列,这些消息经过深思熟虑后告诉您散列!因此,如果您有四个错误,您将得到:

"content_security_policy": "script-src 'self' 'sha256-1' 'sha256-2' 'sha256-3' 'sha256-4'"
sha256-
1..4替换为四条错误消息中的实际哈希值。如果您有脚本问题,并且确信脚本是安全的,您可以添加它们的哈希值并重试。请注意,更改
内容安全策略时,必须重新加载整个扩展

(在上面的示例中,
对象源“self”
是的一部分,因此我在测试时将其保留在了中。
blob
文件系统
、以及
chrome扩展资源
都来自于此。)

安全 你问过安全问题。根据woxxom,权限遵循页面来源。我的测试就是这样,所以我觉得你很好

  • omf
    具有
    tabs
    权限,而
    oii
    没有。如果我跑

    chrome.windows.getAll({populate:true},function(wins){console.log(wins);})
    
    omf
    的上下文中,我为每个打开的选项卡获取
    url
    。如果我在
    oii
    的上下文中运行它,我不会获得
    url
    或任何需要
    选项卡
    权限的其他信息

  • 类似地,在
    omf
    中,
    窗口中,frames[
    oii的iframe索引
    ]
    未定义的
    ,而在
    oii
    iframe中,
    窗口中。父项
    是未定义的

  • 但是,如果我从
    omf
    的弹出窗口加载
    omf
    iframe,iframe和父对象可以通过
    window.frames
    window.parent
    相互通信,并且iframe可以访问
    选项卡
    权限

想象一下,有人为chrome编写了一个电子邮件扩展,在一个额外的popover中列出用户的电子邮件。您是否能够在自己的扩展中打开此扩展的窗口并读取错误的内容?我想这是一个永远不起作用的原因。@DB我提到过安全,也许我应该大胆一点。这意味着一个相对帧/窗口无法访问扩展页的另一个相对帧的dom或对其进行操作(在其中执行JS)。(relative=child/parent/sibling)chrome已经通过原生默认pdf插件iframe实现了这一点。我同意你的看法。我知道ckkdlimhmcjmikdlkmbgfkaikojcbjk
。什么是HDDNKOIPenegfoeAoIBDMNABLMGKPIP
?我在Chrome网上商店买了一个404。哦,我明白了,
hdd…
是(
lao…
)的未打包版本吗?
chrome.windows.getAll({populate:true},function(wins){console.log(wins);})