新标签超链接到 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
我注意到,如果我为带有 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