我有一个旧的Web应用程序,使用apache webserver面向weblogic服务器。用户使用客户端证书和密码进行身份验证,然后可以通过jsp页面和 https 访问pdf文件。在当前浏览器中重新测试应用程序时,我发现pdf:s不会显示在Edge中。
我试图删除不相关的代码。请注意,用户在到达edge_bug.jsp
之前已使用SSL证书登录:
<%@ page %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html"/>
<title>edge_bug.jsp</title>
</head>
<body>
<a href="javascript:void(0)" onclick="window.open('testpdf.pdf', 'PDFWin' + new Date().getTime(), 'scrollbars=yes,status=yes,width=370,height=550,resizable=yes')">Open in new window</a>
<a href="testpdf.pdf" >Open in the same window</a>
</body>
</html>
链接在IE和FireFox中正常工作,并显示pdf,但在Edge中显示一个空白的灰色窗口。
如果我将页面嵌入到框架集中(旧的东西,但应用程序已经过时了!)那么在同一窗口中打开pdf的链接就会开始工作。打开新窗口的链接失败的方式与以前相同。 edge_bug_frameset.jsp
:
<%@ page %>
<!DOCtype html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Frames</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
</head>
<frameset frameborder="0" framespacing="0" border="0">
<frame marginwidth="0" marginheight="0" src="edge_bug.jsp" name="heading" noresize scrolling="no"/>
<noframes>Your browser doesn't handle frames.</noframes>
</frameset>
</html>
浏览器版本:
Microsoft Edge 41.16299.15.0
Microsoft EdgeHTML 16.16299
更新
我注意到行为因Web服务器中服务器证书的信任级别而异。
如果Web服务器具有不受信任的证书(红色屏蔽和地址栏旁边的“证书错误”文本),则不会显示pdf,行为如上所述。
如果Web服务器证书具有较低的信任级别(地址栏旁边的灰色挂锁),则pdf最初不会显示,但如果我首先选择始终允许弹出窗口,请等待10秒然后按F5 (重新加载)显示pdf。在随后的尝试中,pdf仍然不会在最初显示,但在我点击F5之后显示,我不再需要等待10秒才能完成。
如果Web服务器证书具有较高的信任级别(地址栏旁边的绿色挂锁),则pdf最初不会显示,但一旦我选择始终允许弹出窗口,它始终有效。
应该注意的是,即使在新窗口中打开pdf,这些新窗口也不是弹出窗口;当用户主动点击链接时,将打开一个新窗口。
答案 0 :(得分:0)
对我而言,这似乎是 Microsoft Edge Edge HTML中的一个错误。
我们已通过解决方法解决了这个问题。我们建议用户避免使用Microsoft Edge作为我们的Web应用程序。
对于某些用户,Microsoft Edge是默认浏览器。我们已建议其IT部门使用企业模式站点列表强制将Internet Explorer用于我们的Web应用程序,直到Microsoft Edge在Chromium上运行。
答案 1 :(得分:0)
我遇到了一个类似的问题,即PDF无法在Edge中显示(仅),我遇到了这篇文章。此问题仅在生产中存在,而在本地运行代码时则不存在。最终,我们发现我们的问题与运行应用程序的apache服务器的配置有关。
原来,PDF是由服务器以块的形式发送到浏览器的。您可以在通过pdf文件获得的响应标头中看到此信息:Transfer-Encoding:分块。此外,没有发送内容长度标头。因此我们的假设是,边缘可能一直在等待更多的块到达,因为它不知道期望的长度。因此它将永远等待,因为没有更多的块即将来临。显然其他浏览器已经找到了解决此问题的方法,但Edge无法做到。
我们的解决方案是删除apache服务器中pdf文件的mod_deflate。通过删除此内容,它们不再分块发送,并且将内容长度标头添加到响应中。我希望这可以帮助面临类似问题的人。
答案 2 :(得分:0)
我认为Edge 80.x及更高版本的最新版本可能会解决此问题