vue-print-nb-element & vue-print-nb 两款插件类似:

在电脑端调用打印机正常
image.png

image.png

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

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

image.png

取巧的做法的思路:

  1. 获取浏览器的代理
    image.png

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

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

  1. 判断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
       }
     }
      },
  2. 隐藏元素
    3.1 隐藏两个按钮
    css:

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

    3.2 隐藏弹窗的X

    :show-close="!params.fullscreen"
  3. 全屏+隐藏右上角关闭X, 只剩下关闭按钮
    为了避免用户点击浏览器的回退,平板上关闭了打印机直接关闭弹窗

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

    看效果:
    image.png

hahahah,我真是省时省力的小天才(bushi)啊
image.png


Adele0
44 声望3 粉丝