首页 > 其他分享 >微信 H5 页面兼容性——复制到剪贴板

微信 H5 页面兼容性——复制到剪贴板

时间:2023-07-31 17:33:58浏览次数:75  
标签:复制到 剪贴板 微信 复制 execCommand input document

在开发微信 H5 页面时,时常会遇到难以解决的兼容性问题,现收集问题和解决方案,以备后用。

在 PC 浏览器和手机移动端浏览器中,Web API 提供了两种方式:

1.1. Document.execCommand() 方法

Document.execCommand() 是操作剪贴板的传统方法,各种浏览器都支持。

它支持复制、剪切和粘贴这三个操作。

  • document.execCommand('copy')(复制)
  • document.execCommand('cut')(剪切)
  • document.execCommand('paste')(粘贴)

缺点:

  1. 它只能将选中的内容复制到剪贴板,无法向剪贴板任意写入内容。
  2. 它是同步操作,如果复制/粘贴大量数据,页面会出现卡顿。
  3. 有些浏览器还会跳出提示框,要求用户许可,这时在用户做出选择前,页面会失去响应。

1.2. 异步 Clipboard API

优点:

  1. 它的所有操作都是异步的,返回 Promise 对象,不会造成页面卡顿。
  2. 可以将任意内容(比如图片)放入剪贴板。
  • Clipboard.readText() 方法用于复制剪贴板里面的文本数据。
  • Clipboard.read() 方法用于复制剪贴板里面的数据,可以是文本数据,也可以是二进制数据(比如图片)。
  • Clipboard.writeText() 方法用于将文本内容写入剪贴板。
  • Clipboard.write() 方法用于将任意数据写入剪贴板,可以是文本数据,也可以是二进制数据。

在微信浏览器中,安卓设备和苹果设备操作复制功能,会出现下面的兼容性问题:

  1. Clipboard.write() 不能正确复制富文本内容(比如包含换行的内容)。

安卓设备复制失败,报错 NotAllowedError: Write permission denied(写权限被拒绝)。
苹果设备复制出来的内容不对包含了一些 html 标签。

  1. Clipboard.write() 不能处理富文本内容,选用了 vue-clipboard3 插件

vue-clipboard3 可以处理富文本内容,换行通过 \n 实现。

使用方式:

  • 第一步:安装 vue-clipboard3
  • 第二步:在需要使用的页面导入:import useClipboard from 'vue-clipboard3';
  • 第三步:实例化 useClipboard,取到 toClipboard 对象。
  • 第四步:toClipboard 是一个异步方法,使用 await toClipboard(copyInfo) 实现复制到剪贴板。

通过 vue-clipboard3 安卓设备能正常复制。
IOS 复制不了跨域的超链接

  1. vue-clipboard3 不能处理苹果设备跨域复制超链接,选用 document.execCommand('copy') 方法

document.execCommand('copy') 只能用于将选中的内容复制到剪贴板,需要模拟选中的操作:

export const copyText = (text: string) => {
  // 数字没有 .length 不能执行selectText 需要转化成字符串
  const textString = text.toString();
  const input = document.createElement('input');
  input.id = 'copy-input';
  input.readOnly = true; // 防止ios聚焦触发键盘事件
  input.style.position = 'absolute';
  input.style.left = '-1000px';
  input.style.zIndex = '-1000';
  document.body.appendChild(input);
  input.value = textString;

  // ios必须先选中文字且不支持 input.select();
  selectText(input, 0, textString.length);

  input.blur();
  document.body.removeChild(input); // 使用完成后,移除 input 元素,避免占用页面高度

  // input自带的select()方法在苹果端无法进行选择,所以需要自己去写一个类似的方法
  // 选择文本。createTextRange(setSelectionRange)是input方法
  function selectText(textBox, startIndex: number, stopIndex: number) {
    if (textBox.createTextRange) {
      //ie
      const range = textBox.createTextRange();
      range.collapse(true);
      range.moveStart('character', startIndex); //起始光标
      range.moveEnd('character', stopIndex - startIndex); //结束光标
      range.select(); //不兼容苹果
    } else {
      //firefox/chrome
      textBox.setSelectionRange(startIndex, stopIndex);
      textBox.focus();
    }
  }

  console.log(document.execCommand('copy'), 'execCommand');
  if (document.execCommand('copy')) {
    document.execCommand('copy');
    showSuccessToast('复制成功');
  }
};
  1. 通过调用 copyText 自定义函数不能复制到剪贴板

直接调用函数 copyText(link) 不能实现复制,需要用户操作后,比如点了某一按钮再调用 函数 copyText(link)。例如在 vant4(轻量、可定制的移动端组件库)中,点弹框复制按钮时调用:

showDialog({
  confirmButtonColor: '#07d08c',
  confirmButtonText: '复制',
  showCancelButton: false,
  message: '录制已完成,您可将下载地址复制到剪切板,在浏览器中粘贴地址进行下载',
}).then(() => {
  copyText(link);
});

标签:复制到,剪贴板,微信,复制,execCommand,input,document
From: https://www.cnblogs.com/xinjie-just/p/17583045.html

相关文章

  • webpack项目本地dev环境正常,部署至微信字体或图片报cors
    由于webpack设置了高于xxx大小的文件不打包,又与小程序平台的域名不一致导致的问题。修改limit,将其调大,以base64方式直接嵌在页面中(字体文件也适用)......
  • 微信开发之自动添加好友的技术实现
    E云 是一套完整的的第三方服务平台,包含微信API服务、企微API服务、SCRM系统定制、企微系统定制、服务类软件定制等模块,本文档主要讲述个微API服务相关,以下简称API,它能处理用户微信中的各种事件,提供了开发者与个微对接的能力,技术上来讲是一款基于微信提供的个人开放性API,使用简单,......
  • uniapp之微信小程序打包上线
    前言本文旨在打通uniapp上线微信小程序之任督二脉,其实之前在uniapp专题学习中已经打包过一次。这一次算是复习,复习的同时也以博客的方式记录一下。......
  • 垃圾慧分类微信小程序_基于图像识别、语音识别的垃圾分类小程序
    垃圾分类小程序了解垃圾分类2019年7月1日起上海就要开始正式执行《上海市生活垃圾管理条例》,真的。。。不是开开玩笑随便执行如果依旧混合投放垃圾,拒不整改个人最高可罚款200元企业单位最高罚款5万元。所以魔都的朋友都开始努力复习垃圾分类干的东西不一定就是干垃圾湿的不一定就是......
  • 微信小程序相关
    1、框架选型原生微信小程序写法uniapp-clivue写法uniapp-hBuildXxue写法上述三个选项一般使用下方两个;毕竟在不修改代码写法的基础上,很易上手2、UI选型uView-移动端多端开发mintUI-饿了么团队mui-停止维护了vant-有赞前端团队目前在实际业务开发中使用过的只有uview和......
  • 微信wechar(weixin)支持xp和Vista.exe版,32位x86版
    翻看微信官网有没有微信PC版本更新,并查看了官网的更新日志,无意中发现了还有支持XP和Vista系统的版本。一、支持XP和Vista系统的版本下载:1.打开官网:https://weixin.qq.com点击更多日志2.在左侧列表中找到3.3.0版,页面最下面,下载适用于Windows7以下系统的版本经查看,其......
  • 导出手机微信的聊天记录全攻略
    12-5在我们日常使用微信的过程中,有时候很需要把聊天记录导出到电脑的Excel表格中,或者导出到网页中。但是有个软件叫【微信聊天记录挖掘机】,可以把微信电脑版的聊天记录导出,那在手机微信中的聊天记录怎么办呢?其实微信本身就带有迁移功能,只需要把手机微信上的聊天记录迁移到电脑微信......
  • ChatGPT炒股:爬取股票官方微信公众号的新闻资讯
    上市公司的微信公众号,现在已经成为官网之外最重要的官方信息发布渠道。有些不会在股票公告中发布的消息,也会在微信公众号进行发布。所以,跟踪持仓股票的公众号信息,非常重要。下面,以贝特瑞的官方公众号“贝特瑞新材料”为例,来说明如何利用ChatGPT来爬取公司的公众号内容。首先,要登陆......
  • 3-2 编写一个函数 escape(s, t),将字符串 t 复制到字符串 s 中,并在复制 过程中将换行
    ArchlinuxGCC13.1.1 202304292023-07-3012:57:46星期日 点击查看代码#include<stdio.h>voidescape(chars[],chart[]){inti,j;i=j=0;while(t[i]!='\0'){switch(t[i]){case�......
  • 微信小程序入门
    全局配置:配置所有页面路径:app.json,{pages:[配置所有页面]},将首页放置在第一个位置上设置tabbar导航:"tabBar":{"color":"#7A7E83",//字体颜色"selectedColor":"#3cc51f",//选中时候字体的颜色"borderStyle":"black",//tarbar边框......