tsc*_*chi 25 iframe google-chrome ember.js content-security-policy ember-cli
我有一个使用localStorage的网络应用程序.现在我们想通过iframe在其他(第三方)网站上嵌入此网络应用.我们希望提供类似于youtube的iframe嵌入,以便其他网站可以将我们的网络应用嵌入到iframe中.在功能上它就像它不会被嵌入一样.但它不起作用.Chrome会输出错误消息:
Uncaught SecurityError: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
Run Code Online (Sandbox Code Playgroud)
我只是做了以下检查(在iframe中):
if (typeof window.localStorage !== 'undefined') {
// SETUP SESSION, AUHT, LOCALE, SETTINGS ETC
} else {
// PROVIDE FEEDBACK TO THE USER
}
Run Code Online (Sandbox Code Playgroud)
我在Chrome中检查了我的安全设置,就像在另一个Stackoverflow线程中所描述的那样,但它不起作用.在不需要调整大多数现代浏览器的(默认)安全设置的情况下,是否可以进行嵌入更改?
为了提供更多信息,我们使用Ember-CLI作为我们的Web应用程序并打开了CSP(有关Ember-CLI CSP的更多信息).CSP会导致我们的网络应用程序出现安全错误吗?
Pau*_*ish 23
在Chrome的设置>隐私>内容设置下,您将Cookie设置设置为"阻止网站设置任何数据"
此复选框是导致异常的原因.
localStorage是每个域,每个协议。如果您尝试localStorage从独立文件(即使用file:///协议)访问,则本身没有域。因此,浏览器目前会抱怨您的文档无法访问localStorage. 如果您将文件放在 Web 服务器中(例如部署在 Tomcat 中)并从 访问它localhost,您将能够访问localStorage.
小智 6
如果禁用阻止第三方 cookie 不是一个选项,您可以使用 try...catch:
try {
// SETUP SESSION, AUHT, LOCALE, SETTINGS ETC
} catch(err) {
// PROVIDE FEEDBACK TO THE USER
}
Run Code Online (Sandbox Code Playgroud)
我检查了所有答案,但最终什么也没找到。然后我意识到我正在使用什么浏览器。如果您使用 Brave(基于 Chromium),如果您的护盾已打开,您将收到此错误。尝试降低你的盾牌。
正如评论中所指出的,本地存储只是单一来源——页面的来源。尝试从从不同来源加载的 iframe 访问页面的本地存储将导致错误。
您能做的最好的事情就是通过 postMessage API 使用 XDM 破解它。这个库声称可以为您完成繁重的工作,但我还没有尝试过。不过,在走这条路之前,我会确保您了解IE 对 XDM 的糟糕支持。
| 归档时间: |
|
| 查看次数: |
31112 次 |
| 最近记录: |