h5实现一键复制到粘贴板 兼容ios


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1">
    <title>h5实现一键复制到粘贴板 兼容ios</title>
</head>
<body>
<h3>h5实现一键复制到粘贴板 兼容ios</h3>
<button onclick="copyText('h5实现一键复制到粘贴板 兼容ios')">copy</button>
<script>
  const copyText = (text) => {
    // 数字没有 .length 不能执行selectText 需要转化成字符串
    const textString = text.toString();
    let input = document.querySelector('#copy-input');
    if (!input) {
      input = document.createElement('input');
      input.id = "copy-input";
      input.readOnly = "readOnly";        // 防止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);
    if (document.execCommand('copy')) {
      document.execCommand('copy');
      alert('已复制到粘贴板');
    }else {
      console.log('不兼容');
    }
    input.blur();

    // input自带的select()方法在苹果端无法进行选择,所以需要自己去写一个类似的方法
    // 选择文本。createTextRange(setSelectionRange)是input方法
    function selectText(textbox, startIndex, stopIndex) {
      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();
      }
    }
  };


  // 复制文字

  // 必须手动触发 点击事件或者其他事件,不能直接使用js调用!!!
//  copyText('h5实现一键复制到粘贴板 兼容ios')
  /*兼容性补充:
   移动端:
   安卓手机:微信(chrome)和几个手机浏览器都可以用。
   苹果手机:微信里面和sarafi浏览器里也都可以,
   PC:sarafi版本必须在10.2以上,其他浏览器可以.
   兼容性测试网站:https://www.caniuse.com/*/
</script>
</body>
</html>

 

uni-app 是一套基于 Vue.js 开发跨平台应用的框架,它允许开发者编写一次代码,生成适用于iOS、Android等不同平台的应用。然而,在某些情况下,尤其是涉及到复制到剪贴板的操作时,可能会遇到在iOS设备上无法正常复制的问题。 在 iOS 中,由于安全性和隐私策略限制,浏览器默认禁止了直接的 HTML5 `clipboard.writeText` API 对粘贴板操作的访问。这意味着在 iOS 的 Safari 和其他基于 WebKit 浏览器内,你不能像在桌面浏览器那样简单地通过 JavaScript 直接复制文本到剪贴板。为了解决这个问题,你需要: 1. 使用 Uni-app 提供的原生API支持:uni-app 提供了一种叫做 `uni.copyToClipboard` 的方法,这是通过调用系统级别的 API 来绕过安全限制。在 Vue 组件中使用时,需要引入对应的原生方法并处理兼容性问题。 ```javascript import { copyToClipboard } from '@dcloudio/uni-app'; async handleCopy(text) { try { await copyToClipboard(text); // 提示用户成功复制 console.log('已复制到剪贴板'); } catch (err) { console.error('复制失败', err); // 没有复制成功的提示 } } ``` 2. 使用第三方库:有时可以尝试使用一些插件或者库来间接实现复制功能,如 `clipboard.js` 或者 `vue-copy-to-clipboard`,但它们可能需要适配 uni-app 平台。 尽管如此,iOS 系统的体验通常会有所不同,比如需要用户点击复制按钮或者唤起系统的复制功能。如果你发现这个功能在实际项目中还是有问题,建议查看官方文档或查阅相关解决方案以获取最新的解决方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值