我有一个ColdFusion页面,通过window.open(..)调用cfm页面作为弹出窗口。目标页面是加载PDF文件的cfm。被调用的页面代码如下:
<cfcontent type="application/pdf" file="/deploy/cfusion.ear/cfusion.war/myPDF.pdf"/>
<cfflush>
<script language="javascript">
window.location.reload();
</script>
不幸的是,我只获得一个空白页面,除非我手动刷新页面(转到弹出URL栏并按Enter键)以使浏览器显示其内容。
奇怪的是,如果我将来自window.open()的调用者页面代码替换为document.url =,则无需刷新页面即可显示PDF。
您是否有任何建议如何将目标页面作为弹出窗口调用并加载而无需手动刷新?
感谢。
答案 0 :(得分:1)
问题在于您将javascript和PDF内容混合在一起。它应该就是这样:
<cfcontent type="application/pdf" file="/deploy/cfusion.ear/cfusion.war/myPDF.pdf"/>
这会将该PDF的全部内容返回给浏览器。
你想用javascript代码做什么?
编辑听起来它可能与缓存有关。为防止这种情况,请尝试将一些缓存控制标头添加到您的文件中:
<cfheader name="expires" value="#getHttpTimeString(now())#">
<cfheader name="pragma" value="no-cache">
<cfheader name="cache-control" value="no-cache, no-store, must-revalidate">
<cfcontent type="application/pdf" file="/deploy/cfusion.ear/cfusion.war/myPDF.pdf"/>
如果这不起作用,请尝试添加这个:
<cfheader name="Content-Disposition" value="attachment; filename=myPDF.pdf">
答案 1 :(得分:0)
我采用的解决方案是调用代理页面,然后该代理页面生成PDF文件。所以:
window.open('2')
//在弹出的PDF中打开
document.location = '3'
//代理
cfcontent type='application/pdf' file='...'
//生成PDF
为什么我不能只拥有1和3只是现在的一个谜,但在我的情况下它完美无缺。