新选项卡 PDF 超链接

spe*_*.sm 4 html pdf compatibility google-chrome hyperlink

我注意到,如果我创建一个 PDF 的超链接,target="_blank"它就无法正确打开。它会打开一个新选项卡,但不会加载 PDF,仅显示白屏。我使用的是 Google Chrome v.43。有其他人注意到这个问题或找到解决办法吗?

我已经使用 Safari 和 Firefox 对此进行了测试,两者在新选项卡中打开 PDF 时都没有任何问题。我也尝试过禁用 Chrome 中的附加组件并使用隐身模式,但没有成功。

测试链接: http: //jsfiddle.net/fkfxoho0/

<a href="http://static.googleusercontent.com/media/www.google.com/en/us/webmasters/docs/search-engine-optimization-starter-guide.pdf" target="_blank">Optimization Starter Guide</a>
Run Code Online (Sandbox Code Playgroud)

Chrome v.42 的视频以及 v.43 的问题:
https://youtu.be/v_EAedODKfA

Ale*_*ara 5

该问题似乎是由具有sandbox属性的 iframe (如 JSFiddle)引起的,因为此类 iframe 外部的链接不会发生此问题。可以使用以下 HTML 文件在 JSFiddle 外部重现该问题。

框架.html

<iframe sandbox="allow-same-origin allow-forms allow-popups allow-scripts" src="content.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

内容.html

<a href="https://www.adobe.com/enterprise/accessibility/pdfs/acro6_cg_ue.pdf">default</a>
<a href="https://www.adobe.com/enterprise/accessibility/pdfs/acro6_cg_ue.pdf" target="_blank">_blank</a>
<a href="https://www.adobe.com/enterprise/accessibility/pdfs/acro6_cg_ue.pdf" target="_top">_top</a>
Run Code Online (Sandbox Code Playgroud)

使用这些沙箱值,默认目标_blank_topall 都无法渲染 PDF,默认无法在 iframe 中渲染,并且_blank打开_top一个新选项卡失败(_top由于沙箱而打开一个新选项卡)。

如果我们添加allow-top-navigation沙箱值,我们就可以按_top预期工作。

<iframe sandbox="allow-same-origin allow-top-navigation allow-forms allow-popups allow-scripts" src="content.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

但是,打开的新选项卡_blank仍然无法渲染 PDF。即使我在 MDN 上添加了所有沙箱放松属性,问题仍然存在(并不是我期望添加会allow-pointer-lock执行任何操作)。

<iframe sandbox="allow-same-origin allow-top-navigation allow-forms allow-popups allow-scripts allow-pointer-lock" src="content.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

_blank我可以在 Chrome 43 的 iframe 中工作的唯一方法是sandbox完全删除该属性。

<iframe src="content.html"></iframe>
Run Code Online (Sandbox Code Playgroud)

现在默认目标_blank_top按预期工作。

不幸的是,删除该sandbox属性并不是一个解决方法。如果您首先使用它,那么您可能需要它。我不能肯定地说在沙盒 iframe 中阻止 PDF 文件没有安全原因,但用户体验使我相信这更有可能是一个错误。

我已经针对此问题打开了错误报告,链接回此问题:

https://code.google.com/p/chromium/issues/detail?id=505860

更新:事实证明这是一个设计的安全功能,因此它可能不会返回到 Chrome 42 行为,但将来可能会添加一个新的沙箱选项来放松此安全功能。

UPDATE-2:允许此功能的沙箱属性是“allow-popups-to-escape-sandbox”。更多信息请点击此处