onbeforeprint和onafterprint在Chrome和IE中不起作用?

时间:2012-11-28 06:03:25

标签: javascript html5

我在我的项目中使用打印(使用HTML和javascript)。在mozilla onbeforeprint和onafterprint工作正常但没有使用chrome。

6 个答案:

答案 0 :(得分:10)

对Chrome有用的是检查' matchmedia'在'窗口'如:

<div class="container">
<div class="bs-docs-example">
    <ul id="myTab" class="nav nav-tabs">
        <li class="active"><a href="#home" data-toggle="tab">Crop</a>

        </li>
        <li><a href="#profile" data-toggle="tab">Render View</a>

        </li>
    </ul>
    <div id="Content" class="tab-content">
        <div class="tab-pane fade in active" id="home">
            <div class="col-md-6">
                <div class="panel crop">
                    <div class="well">
                        <div class="file-warning"></div>
                        <div class="form-group">
                            <label for="imageid">Select an image</label>
                            <input type="file" name="file" class="btn btn-default form-control" id="file" accept="image/jpg, image/png, image/jpeg" />
                        </div>
                        <div class="form-group">
                            <label for="imageid">Enter asset ID</label>
                            <input type="text" onkeypress="return charsOnly(this, event)" maxlength="64" class="form-control" id="imageid" name="imageid" placeholder="Enter image ID">
                        </div>
                        <button class="btn btn-default" id="reset">Reset</button>
                        <!--<input id="renderButton" type="button" value="Render final image" class="btn btn-primary" />--></div>
                    <div class="panel-body cropper">
                        <div id="container" class="well"></div>
                        <input id="renderButton" type="button" value="Render cropped image" class="btn btn-primary" />
                    </div>
                </div>
            </div>
        </div>
        <div class="tab-pane fade" id="profile">
            <div class="col-md-6 render">
                <div class="panel">
                    <div class="panel-body">
                        <div class="response"></div>
                        <div id="result_container" class="result"></div>
                    </div>
                    <!--<div class="share-link"></div>-->
                    <div class="well submit-well">
                        <div class="share-link"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


var $tabs = $('#Content');

$('#renderButton').on('click', function () {
    $tabs.filter('.active').next('li').find('a[data-toggle="tab-    pane"]').tab('show');
});

答案 1 :(得分:1)

Chrome doesn't have onbeforeprint.

执行此操作的首选方法是使用print media specific stylesheets

如果你绝对必须发现Print operations with javascript cross browser这看起来很有希望,但我自己没试过。

答案 2 :(得分:1)

Chrome不支持这些活动。相反,它支持&#39; window.matchMedia&#39;。还有一个bug in Chrome阻止它打印所有页面。因此,我建议您在网页上添加一个打印按钮,并要求用户使用该按钮,而不是通过Chrome菜单进行打印。

var beforePrint = function() {
    console.log("before");
};
var afterPrint = function() {
    console.log("after");
};

var launchedFromMenu = true;
if (window.matchMedia) {
    var mediaQueryList = window.matchMedia('print');
    mediaQueryList.addListener(function(mql) {
        if (mql.matches) {
            if(launchedFromMenu) {
                // https://bugs.chromium.org/p/chromium/issues/detail?id=571070
                alert("There is a bug in Chrome/Opera and printing via the main menu does not work properly. Please use the 'print' icon on the page.");
            }
            beforePrint();
        } else {
            afterPrint();
        }
    });
}

// These are for Firefox
window.onbeforeprint = beforePrint;
window.onafterprint = afterPrint;

function printPage() {
    window["beforePrint"]();
    launchedFromMenu = false;
    window.print();

}

答案 3 :(得分:0)

快速更新,因为支持打印事件has improved a lot

  • 2017年12月发布的Chrome 63支持source
  • Opera 50以及
  • Edge从一开始就支持它
  • 甚至IE的旧版本6(6 !!)也支持它

答案 4 :(得分:0)

根据他们的变更日志,此功能自Chrome 63起可用。

答案 5 :(得分:-1)

在Chrome中无法使用onbeforeprint&amp; onAfterPrint。

但您可以使用css打印介质限制打印页面

示例

<link rel="stylesheet" href="print.css" type="text/css" media="print" />

此css包含在页面标题中。

css具有以下样式

#header, #menu, #entry-content, .noprint {display: none;}