Javascript 如何加载其他扩展';在我的扩展名&x27;新标签页
无法将内容脚本注入具有的扩展页 chrome扩展方案 只需在iFrame中加载页面,我不想/不需要在其中加载内容脚本,这样用户就可以两全其美,或者也可以吃自己的蛋糕,我的tabs manager扩展和他们在chrome商店中的最爱 我的实验 我从另一个扩展的选项页面打开了开发工具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-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…
,我想加载一个页面表单扩展IDoii…
解决方案
- 在
中,我将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);})