解决 vue-print-nb-element & vue-print-nb 在Huawei MatePad Air局部打印失效问题

vue-print-nb-element 与 vue-print-nb 两款插件类似,都是基于 Vue 实现打印功能。

在电脑端调用打印机正常:

解决 vue-print-nb-element & vue-print-nb 在 Huawei MatePad Air 局部打印失效问题解决 vue-print-nb-element & vue-print-nb 在 Huawei MatePad Air 局部打印失效问题

Huawei MatePad Air 端调用打印机失效:

原来设置了只打印弹框中的表格部分内容,实际上却将整个浏览器 tab 页进行打印。

Huawei MatePad Air 端调用打印机失效

取巧的做法的思路:

1. 获取浏览器的代理

获取浏览器的代理

华为的平板可以切换电脑模式:

华为的平板可以切换电脑模式

电脑版的显示,看出来唯一的区别是,我本机的 Chrome 是 123 的版本,华为是 99 的版本。

解决 vue-print-nb-element & vue-print-nb 在 Huawei MatePad Air 局部打印失效问题

2. 判断 Chrome 的版本 99 或是 华为浏览器,打印区域弹窗全屏

created() {
 const nu = navigator.userAgent
 const pattern = new RegExp("Chrome" + "[ \\/]([\\d]+)");
 const match = nu.match(pattern);
 if (match && match.length > 1) {
   const detectedVersion = parseInt(match[1], 10);
   if (detectedVersion<123 || nu.indexOf('HuaweiBrowser/') > -1) {
     this.fullscreen = true
   }
 }
  },

3. 隐藏元素

3.1 隐藏两个按钮

css:

@media print {
  @page { size: A4 portrait; }
  .no_print {
    display: none;
  }
}

3.2 隐藏弹窗的 X

:show-close="!params.fullscreen"

4. 全屏+隐藏右上角关闭 X, 只剩下关闭按钮

为了避免用户点击浏览器的回退,平板上关闭了打印机直接关闭弹窗。

printObj: {
 id: "xx",
 extraCss: "xx",
 extraHead: 'xx',
 closeCallback (vue) {
   if (vue.fullscreen) {
     vue.show = false;
   }
 }
}

最终效果:

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 解决 vue-print-nb-element & vue-print-nb 在Huawei MatePad Air局部打印失效问题

发表回复