我正在阅读the documentation on Chrome Apps and CSP.但是,我在浏览器中看到的行为与文档不匹配,文档本身似乎相互矛盾 - 具体来说:
指向远程网址的iframe,这些网址在Chrome应用内删除。
vs,在完全相同的页面上:
沙盒页面可以使用iframe
其中似乎包含了清单中permissions
允许的远程iframe。
我的用例非常简单:我想将Spotify播放器嵌入我的Chrome应用中,通常使用
<iframe src="https://embed.spotify.com/?uri=spotify:track:4bz7uB4edifWKJXSDxwHcs" width="300" height="380" frameborder="0" allowtransparency="true"></iframe>
我的manifest.json
"app": {
"background": {
"scripts": ["js/background.js"]
}
},
"permissions": [
"https://embed.spotify.com/*"
],
"sandbox": {
"pages": ["sandbox.html"]
},
我的sandbox.html(在背景页面上有自己的iframe):
<body>
<iframe src="https://embed.spotify.com/?uri=spotify:track:4bz7uB4edifWKJXSDxwHcs" width="300" height="380" frameborder="0" allowtransparency="true"></iframe>
</body>
但是我仍然得到:
拒绝框架&#39; https://embed.spotify.com/?uri=spotify:track:4bz7uB4edifWKJXSDxwHcs&#39;因为它违反了以下内容安全政策指令:&#34; frame-src&#39; self&#39; data:chrome-extension-resource:&#34;。 sandboxed.html:2
即使这与在应用页面中嵌入沙盒页面示例匹配。也许我应该使用webview代替?文档没有说清楚。
我可以访问iframe中的外部网站吗?如果是,怎么做?
答案 0 :(得分:3)
这句话:
指向远程网址的iframe,这些网址在Chrome应用中已停用。
不是真的。指向远程网址的iframe默认为 ,但有两种机制可以加载指向远程网址的iframe:
如果您有从网络上加载的内容(例如,它需要是最新的)但是没有与应用的其余部分进行交互,请使用webview < / strong>即可。 webview可以访问iframe,但它们根本无法与应用的其余部分进行通信。另一方面,他们设置起来很简单。
如果您有内容从网络加载并与应用的其余部分进行互动,请使用沙盒:
然后使用HTML5 postMessage() API发送1到2的消息。例如,第1页可以使用chrome。* API执行操作,然后将消息发布到沙箱页面。然后,沙盒页面会接收该消息并执行某些操作。
就我而言: