【问题标题】:How to load another sites content in an iframe?如何在 iframe 中加载其他网站的内容?
【发布时间】:2019-04-18 18:29:06
【问题描述】:

我正在尝试对 pdf 进行 iframe,该 pdf 是通过 AJAX 检索的,因为服务器启用了 CORs,所以工作正常(已验证我通过 devtools 获取了 pdf)。

但由于以下错误,结果无法嵌入到 iframe 中:

Refused to frame '<SERVER_DOMAIN>' because it violates the following Content Security Policy directive: "default-src 'none'". Note that 'frame-src' was not explicitly set, so 'default-src' is used as a fallback.

所以我在我的页面中添加了以下元标记:

<meta http-equiv="Content-Security-Policy" content="default-src 'self' <SERVER_DOMAIN>">

但还是不行。如何解决这个问题?

【问题讨论】:

  • 先尝试将“frame-src”设置为“*”,看看能不能搞定。
  • 如果您不想公开该 pdf 源的实际 url,您可以使用服务器端代理来获取文件内容并将其用作 iframe src。可能比使用 ajax 更容易
  • @JosefFazekas 你的意思是这样吗? &lt;meta http-equiv="Content-Security-Policy" content="frame-src:*"&gt; 没用。语法是什么样的?
  • 我能问你为什么不在服务器端设置 CSP 吗?当您在服务器向您发送响应时已经收到 CSP 标头时,使用元标记无法正常工作(请参阅 Quentins 回答)

标签: javascript iframe cross-domain content-security-policy same-origin-policy


【解决方案1】:

既然你说你添加了元标记,这意味着你一定已经有一个来自其他来源的 CSP。

MDN:

添加额外的策略只能进一步限制受保护资源的能力,这意味着将不允许连接,并且作为最严格的策略,强制执行 connect-src 'none'。

您需要编辑 现有 策略以删除限制。你不能通过添加一个额外的来做到这一点。

【讨论】:

  • 对不起,如果我误解了你的意思,但是内容安全策略不存在元标记,我添加了唯一的。
  • @TK123 — 可能现有策略来自 HTTP 标头。
猜你喜欢
  • 2017-11-03
  • 2013-09-02
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2013-04-02
  • 2017-12-04
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多