【问题标题】:Error Printing through iframe - 'Undefined' Error when using Ctrl+P通过 iframe 打印时出错 - 使用 Ctrl+P 时出现“未定义”错误
【发布时间】:2013-05-07 04:16:29
【问题描述】:

我有一个在 jQuery 模态框内的网站上弹出的文档。文档末尾有一个打印按钮,它只是在弹出框中打印文档。

我想通过 Ctrl+P 仅在 iframe 内打印文档。这需要防止打印包括背景在内的所有页面的默认行为。

这是用于打印的 jQuery 代码:

$(document).keydown(function(event) {
    if ( ( (event.ctrlKey == true) || (event.metaKey == true) ) && (event.which == '80')) {
            event.preventDefault();
            printAssessment();
        }

});

function printAssessment() {
    if ($('#frameContainer').length) {
        $('#lightboxFrame')[0].contentWindow.print();    
    }

}

带有 iframe 的页面的 HTML 如下:

 <div id="frameContainer">
      <iframe id="lightboxFrame" width="950px" scrolling="auto" height="500px">
         <!DOCTYPE html>
           <html>
             <head>
                <body> (Whole Document in a Div) </body>
             ...

现在,问题是当我打开我的模态框并按 Ctrl+P 时,如果我不滚动模态框,它会以我想要的方式打印。但是如果我滚动模式,然后按 Ctrl+P,它会给我以下错误:

Uncaught TypeError: Cannot read property 'contentWindow' of undefined 

奇怪的是,即使 iframe 打开时,它仍然发现它未定义,但只有当我滚动模态 iframe 时。如果我只是打开模态并按 Ctrl+P,它会打印得很好。

【问题讨论】:

    标签: jquery printing


    【解决方案1】:

    嘿,使用 keypress 事件而不是 keydown

    $(document).keypress(function(event) {
    if ( ( (event.ctrlKey == true) || (event.metaKey == true) ) && (event.which == '80')) {
            event.preventDefault();
            printAssessment();
        }
    
    });
    

    希望它会起作用。

    【讨论】:

    • 事件和contentWindow有什么关系?
    【解决方案2】:

    似乎$('#lightboxFrame') 没有返回任何元素。如果你改变了怎么办

    if ($('#frameContainer').length) {
    

    if ($('#lightboxFrame').length) {
    

    ?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多