weboffice获取外部剪切板内容解决方案

news2024/12/28 20:16:43

1、初始化引入sdk时,需要传入监听函数  --  getClipboardData

在移动端 APP 需要从系统剪切板获取数据时,可以使用该接口。

目前仅支持移动端表格以及文字,并且 JSSDK 版本为 v1.1.6

可以通过传入 获取系统剪切板数据函数 在文档粘贴的时候,调用传入函数获取系统剪切板数据,返回一个 Promise 或者 Object

// 获取系统剪切板数据函数
const getClipboardData = () => {
  // 自身业务处理……

  return Promise.resolve({
    text: 'xxx', // text 格式数据
    html: 'xxx', // html 格式数据,目前仅表格支持
    updateExternal: true // 是否从外部粘贴数据,为 false 则从内部剪切板获取
  })
}

// 配置获取系统剪切板数据函数
WebOfficeSDK.init({
  officeType: WebOfficeSDK.OfficeType.Writer,
  appId: 'xxxxx',
  fileId: 'xxxxx',
  getClipboardData
})

解决方案一:

通过window.navigator.clipboard.read()读取浏览器剪切板内容,不过浏览器安全限制,需要先弹窗是否有读取权限,可以通过window.navigator.permissions.query来判断浏览器是否有权限读取

代码

export async function getClipboardText() {
    const name = await window.navigator.permissions.query({
      name: 'clipboard-read'
    })
    const clipboardItems = await window.navigator.clipboard.read()
    let textHtml, textPlain
    for (const clipboardItem of clipboardItems) {
      for (const type of clipboardItem.types) {
        const item = await clipboardItem.getType(type)
        if (item && item.type === 'text/html') {
          textHtml = await item.text()
        }
        if (item && item.type === 'text/plain') {
          textPlain = await item.text()
        }
      }
    }
    console.log(textPlain)
    return { textHtml, textPlain }
}

调用

const getClipboardData = () => {
      return new Promise((resolve)=>{
        getClipboardText().then(res=>{
           resolve({
              text:res.textPlain,
              html:res.textHtml,
              updateExternal: true, 
            })
        });
      })
    };

!!!限制:很多手机浏览器不支持,无法弹出是否获取剪切板权限,目前只在pc谷歌浏览器调试成功

解决方案二:安卓开发同学自己去监听剪切板内容是否变化,在前端提供一个js方法让安卓端来调用,通过这种方式来改变获取到的剪切板内容。

vue中提供的js调用方法

mounted(){
    window.getText = this.getText;
},
methods:{
    // 安卓端调用函数传入剪切板内容
    getText(data){
      this.textPlain = data;
    }
}

getClipboardData函数初始化

const getClipboardData = () => {
      return new Promise((resolve)=>{
        console.log(this.textHtml, this.textPlain)
        resolve({
          text:this.textPlain,
          html:this.textHtml,
          updateExternal: true, 
        })
      })
    };

!!!注意

需要加入文字监听事件和表格监听事件 

 代码

 jssdk.ApiEvent.AddApiEventListener('ClipboardCopy', data => {
        this.textPlain = data.text
        console.log(this.textPlain);
      })
      jssdk.ApiEvent.AddApiEventListener('Clipboard_Copy', data => {
        this.textPlain = data.text;
      })

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「深度学习之优化算法」(四)遗传算法

1. 遗传算法简介 遗传算法(Genetic Algorithms,GA)是一种模拟自然中生物的遗传、进化以适应环境的智能算法。由于其算法流程简单,参数较少优化速度较快,效果较好,在图像处理、函数优化、信号处理、模式识别等领域有着广泛的应用。   在遗传算法(GA)中,每一个待求问题…

“鸡兔同笼”问题蕴含的数学思维、数学思想

郭靖 [摘 要]“鸡兔同笼”问题是我国古代数学里的经典问题,出自《孙子算经》,也是小学数学的拓展内容。“鸡兔同笼”问题是一类题的总述,其背后隐藏着不同的解题策略与思维。教师应剖析由“鸡兔同笼”问题延伸出来的解题思路与思考方式&…

社交电商以人为核心,流量营销矩阵该如何打造

​ 从流量运营的角度来看,社交电商和传统电商最大的区别在于,社交电商在一开始就不是以流量为核心,而是以人为核心。 具体来说,就是通过社交关系链把消费者串联起来,打造一个巨大的流量池。在这个流量池中&#xff0…

经典游戏|像素鸟

基于C#制作一个经典的像素风休闲娱乐小游戏|像素鸟。 一、项目搭建1.1、创建1.2、界面设计二、功能实现2.1、初始化游戏2.2、绘制管道2.3、地面移动2.4、控制小鸟下落的重复执行事件2.5、结语一、项目搭建 1.1、创建 打开Visual Studio,右侧选择创建新项目。 搜索框输入winf…

AI实景三维建模开放网页版,无需下载客户端,照片/视频转3D模型

近年来,随着实景中国建设进程的推进,从日常生活中道路、桥梁等基础设施的实景三维数字化,到虚拟现实、元宇宙数字展厅、虚拟数字人等互联网新基建参与方的不断增加,对现实物品进行1:1建模再映射到数字空间中的需求领域已经越来越广…

Docker部署(3)——Dockerfile文件参数

一、Dockerfile文件参数 Dockerfile 是用于构建 Docker 镜像的文件(之前的项目就是将jar包通过Dockerfile文件(D要记得大写!!),打包成一个镜像,当然后面也有一键化部署,使用插件来完成,方式有很多&…

Benewake(北醒) TF-LC02 (TTL) 雷达不使用TTL转USB转接板在Arduino Uno上的运用

目录 前言Benewake(北醒) TF-LC02产品简要说明Arduino开发板介绍Benewake(北醒) TF-LC02 接口及通讯协议说明接口定义串口协议说明通讯协议说明功能码说明 接线示意图例程说明配置软硬串口定义获取TOF数据的结构获取雷达距离数据的协议解析通过主循环发送获取距离指令&#xff…

信号AWGN噪声添加及SNR计算(matlab完整代码)

SNR(Signal-to-Noise Ratio,信噪比)是与信号质量相关的重要指标。它衡量了信号与噪声之间的相对强度,在计算 SNR之前,通常需要进行校准和对齐,以确保接收到的信号与理想信号具有相同的参考点和相位&#xf…

第三方库介绍——zlib库

文章目录 zlib1. zlib库介绍2. zlib库的应用3. 下载地址4. 函数使用教程4.1 compress 与 uncompress4.3 使用过程解析4.2 infate、deflate、z_stream 5. 交叉编译zlib库 zlib 1. zlib库介绍 zlib是一套通用的解压缩开源库,提供了内存(in-memory&#x…

SpringBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表

SpringBoot对接kafka,批量、并发、异步获取消息,并动态、批量插入库表 更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。 一、背景 因业务发展需要,需要对接kafka,快速批量接收消息日志,避免消息日志累积过多&a…

客服岗位必备的在线工具:内部知识库

随着互联网的快速发展,越来越多的企业开始将客户服务转移到在线平台上,以便更好地满足客户需求。在线客服是这一趋势中的重要组成部分,它不仅能够提高客户满意度,还能够提高客户忠诚度和品牌形象。但是在进行在线客服工作时&#…

Vault从入门到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密钥,详细整理部署Vault的详细步骤

Vault从入门到精通系列之一:深入了解安全工具Vault、Vault根令牌和解封密钥,详细整理部署Vault的详细步骤 一、深入了解安全工具Vault二、Vault根令牌和解封密钥的含义和作用三、centos7上部署和启动Vault的流程四、vault下载地址五、安装vault六、启动V…

爬虫程序采集网络数据

目录 一、Xampp搭建本地网站 二、认识Html标签 三、爬虫程序范例 (一)调用模块 (二)加载需要爬虫的网址 (三)爬取内容选取 (四)爬取内容保存 (五) 完整爬…

【MySQL】不就是多表查询

前言 嗨!小伙伴们大家好呀,忙碌的一周就要开始!在此之前我们学习的MySQL数据库的各种操作都是在一张表之中,今天我们学习要对多张表进行相关操作,相比较于单一的表来说,多张表操作相对复杂一些,…

GaussDB云数据库SQL应用系列—分区表管理

目录 前言 一、分区表基本原理 二、分区表主要优势 三、分区表常见场景 四、GaussDB分区表管理(示例) 示例一:创建范围分区表(RANGE) 示例二:创建哈希分区表(HASH) 示例三:创建列表分区…

Python基础(8)——转换数据类型

Python基础(8)——转换数据类型 文章目录 Python基础(8)——转换数据类型目标一. 转换数据类型的作用二. 转换数据类型的函数三. 快速体验四. 实验总结 目标 数据类型转换的必要性数据类型转换常用方法 一. 转换数据类型的作用 …

【数据库原理与实践】DS系的期末考题(2023)

前排感谢 感谢在数据库期末考试中进行截图保存题目的大数据同学,给隔壁计算机同学一些小安慰呜呜 选择题 由于顺序其实无关紧要,这里遂不再按题号进行整理 答案仅是本人初步作答,可能存在错误,欢迎指出 8:B 数据的定义:数据库中存储的基本对象 9:ABC 数据库系统DBS组…

神经网络中的损失函数

在《神经网络中常见的激活函数》一文中对激活函数进行了回顾,下图是激活函数的一个子集—— 而在神经网络领域中的另一类重要的函数就是损失函数,那么,什么是损失函数呢? 损失函数是将随机事件或其有关随机变量的取值映射为非负实…

网络安全学术顶会——CCS '22 议题清单、摘要与总结(上)

注意:本文由GPT4与Claude联合生成。 按语:ChatGPT在计算机领域的翻译质量还是欠缺一些,翻译出来的中文有的不够自然,经常完全按照英文的表达方式来,导致中文特别长,很绕。GPT4的翻译效果相对ChatGPT效果要好…

第38步 深度学习图像识别:VGG19建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 (1)预训练模型和迁移学习 预训练模型就像是一个精心制作的省力工具,它是在大量的数据上进行训练,然后将学习到的模型参数保存下来。然后,我们可以直接使用这些参数&#xff0…