带有pdf的<object>标签在firefox中不起作用,并且在IE </object>中搞砸了

时间:2014-03-20 13:20:43

标签: html css internet-explorer google-chrome firefox

我的对象标签看起来像这样:

<div id="embeddedPdfContainer"><object data="<c:url value="/download-pdf/${id }"/>" id="embeddedPdf"  width="820" height="1135" type="application/pdf"></object></div>

在Chrome中,这个标签以我想要的方式工作。在Firefox中,它根本不起作用,它在IE中搞砸了。这里的album在每个浏览器中都有截屏。我有什么选择?

另外在firefox上我发现这个pdf不适用于默认的firefoxe的pdf查看器。当我选择将adobe acrobat扩展用于pdf文档时,它可以很好地工作。

6 个答案:

答案 0 :(得分:4)

您可以直接将pdf的链接写入数据属性,如下所示:

<div id="embeddedPdfContainer"><object data="/download-pdf/some.pdf" id="embeddedPdf"  width="820"  height="1135" type="application/pdf"></object></div>

我使用Chrome和Internet Explorer(不同版本)对其进行了测试,并且可以正常使用

如果您想继续使用c:url选项,则应将第二个“更改为”

所以改变这个:

"<c:url value="/download-pdf/${id }"/>"

进入这个:

 "<c:url value='/download-pdf/${id }'/>"

为了不“逃避”字符串

答案 1 :(得分:3)

当您提供可疑的HTML时:

<div id="embeddedPdfContainer"><object data="<c:url value="/download-pdf/${id }"/>" id="embeddedPdf"  width="820" height="1135" type="application/pdf"></object></div>
                                            ^      ^
                                            |      |
                                          Start   End?

...浏览器试图弄清楚你的想法,取决于他们实施的算法以及网站管理员的想象力,取得了不同程度的成功。不同的浏览器无法就如何处理有效的代码(其中有明确的规则和规范)达成一致意见,因此预计不一致的程度会随着无效而增加代码。

恕我直言,获取跨浏览器兼容性的最简单途径是生成有效代码。作为帮助,您可以使用on-line W3C HTML validator或IDE提供的任何等效工具。

答案 2 :(得分:3)

您的jsp代码似乎在语法上是正确的,但我们无法知道生成的代码是否有意义。您应该编写生成的html代码及其相关的css代码,而不是编写jsp代码。

无论如何,关于Firefox的问题,我认为这是由于这个Firefox的错误: https://bugzilla.mozilla.org/show_bug.cgi?id=937663

最新版本(Firefox 28)似乎仍然受到影响,也许下一个将修复它。

关于资源管理器问题,可能是由于页面渲染的不同。编写IE特定的ccs代码将解决问题。

答案 3 :(得分:2)

我想知道这适用于任何浏览器!

c:url是JSP标准标记库(JSTL)的一部分。要使用JSTL核心标记,您至少应该在JSP页面中包含:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

接下来就是PDF格式也没有HTML(格式)! PDF文件的处理在很大程度上取决于用户系统设置和配置。

任何浏览器都需要一个(集成的)插件来显示PDF文件! 参见例如这个问题在SO:Embed Pdf in html5

正如您所看到的,通常会使用embed元素,其类型属性为type="application/pdf"

但这也远非理想,并不适用于所有浏览器!

  

我有什么选择?

如上述链接问题的接受答案中所述,您应该“将PDF转换为HTML5并嵌入HTML5版本。”

答案 4 :(得分:1)

<iframe><object>中使用外部查看器(更像是https://docs.google.com/viewer)会有帮助吗? 这是一个折衷方案,因为您无法更改访问者浏览器的配置以添加/加载额外的插件。

对于样式部分,您可以将display:block设置为<iframe><object>,设置尺寸和margin


<edit>这不是问题</> 你确定使用你的报价和这部分吗? "<c:url value="/download-pdf/${id }"/>"

您正在将价值和数据包装在一起

答案 5 :(得分:1)

首先,c:url标记与浏览器端行为无关。标签应该由服务器重写,浏览器应该接收绝对路径。 (也许你可以从浏览器发布消息来源?)

所以问题只是嵌入在<object>中的PDF的浏览器兼容性。大多数现代浏览器都应该使用这个标签,包括Firefox,所以你应该检查你的Firefox上是否正确安装了pdf插件。

对于IE问题,您没有提到您正在使用的版本,因此可以使用<embed>以外的<object>来解决此问题。根据{{​​3}},您可以尝试这种风格以获得更好的兼容性:

<object data="abc.pdf" type="application/pdf">
    <embed src="abc.pdf" type="application/pdf" />
</object>