【发布时间】:2015-11-28 14:34:17
【问题描述】:
我有一个独特的问题——虽然我见过类似的问题和答案——但没有一个能完全解决我的挑战。
目前,我提供了一个“打印”按钮,用于在基于嵌入和隐藏 iframe 的浏览器上加载打印对话框。这工作得很好,但我不想通过拉入 iframe 来减慢页面加载速度。
所以,我想加载一个没有源的 iframe,然后如果用户单击打印图标,则编写正确的源 url,然后重新加载 iframe,最后显示对话框。
不幸的是,在我重新加载 iframe 之前会弹出打印对话框,因此会在对话框中加载一个空白页。在随后的点击中,PDF 被加载并准备好打印。
<a href='#' id='load_pdf' ><i class='fa fa-2 fa-print'></i></a>
<iframe id="iFramePdf" src="" style="display:none;"></iframe>
<script type="text/javascript">
jQuery(document).ready(function() {
$("#load_pdf").click(loadPDF);
function loadPDF() {
$('#iFramePdf').attr('src', "my.pdf");
// Attempt to reload iframe
$('#iFramePdf').load("my.pdf");
sendPrint('iFramePdf')
}
function sendPrint(elementId) {
var iframe = $(element_id)[0];
iframe.contentWindow.focus();
iframe.contentWindow.print();
}
});
</script>
我尝试了以下各种方法来重新加载:
// Attempt 1
$('#iFramePdf').attr('src', function () { return
$(this).contents().get(0).location.href });
// Attempt 2
$('#iFramePdf').attr("src", $('#iFramePdf').attr("src"));
$('#iFramePdf').attr('src', function () { return $(this).contents().get(0).location.href });
// Attempt 3
$('#iFramePdf')[0].contentWindow.location.reload(true);
// Attempt 4
var getMyFrame = document.getElementById(elementId);
getMyFrame.contentWindow.location.reload(true);
我什至尝试过使用 jQuery 的 defer 方法,但没有成功(可能是因为我缺乏知识)。如果我能得到任何指导,我将不胜感激。
【问题讨论】:
-
iFrame 是一个相当残酷的解决方案。通常,可以利用CSS @media 规则在同一页面上轻松维护显示格式和打印格式。
-
我尝试了这些建议,但无济于事。我决定添加一个先加载 iframe 源的悬停方法,然后让 click 事件处理打印。虽然这不是我想要的答案,但它提供了一个可行的解决方案。
标签: javascript jquery iframe reload jquery-deferred