新标签超链接到 PDF

New Tab Hyperlink to PDF

我注意到,如果我为带有 target="_blank" 的 PDF 创建 hyperlink,它无法正确打开。它会打开一个新选项卡,但不会加载 PDF,它只会显示一个白色屏幕。我正在使用 Google Chrome v.43。有没有其他人注意到这个问题或找到了解决办法?

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

测试link: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>

Chrome v.42 的视频,然后是 v.43 的问题:
https://youtu.be/v_EAedODKfA

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

frame.html:

<iframe sandbox="allow-same-origin allow-forms allow-popups allow-scripts" src="content.html"></iframe>

content.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>

使用这些沙箱值,默认目标 _blank_top 都无法呈现 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>

但是_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>

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

<iframe src="content.html"></iframe>

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

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

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

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

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

UPDATE-2:允许此功能的沙箱属性是 'allow-popups-to-escape-sandbox'。更多信息 here