当前位置: 首页 > news >正文

Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图

// 在页面开始加载时就注入的 JS(禁用右键和长按) private void injectDisableContextMenuJS(WebView view){String earlyJs ="javascript:(function(){" + // 只禁用右键菜单和长按调用系统菜单"document.oncontextmenu = function(){return false;};" + // 不禁用选择,但要阻止系统默认行为"document.oncopy = function(e){" +" e.preventDefault();"+" return false;"+"};"+"document.oncut = function(e){" +" e.preventDefault();"+" return false;"+"};"+ // 临时禁用 touch callout(长按菜单)"document.body.style.webkitTouchCallout = 'none';"+"})();";view.evaluateJavascript(earlyJs,null);}
// 注入JS,监听selectionchange事件,把选中文本传给Java层 private void injectSelectionJS(){// 关闭 X5 的长按菜单 if (mWebView.getX5WebViewExtension() != null){mWebView.getX5WebViewExtension().setLongPressTextExtensionMenu(1);}Strin js ="javascript:(function(){" + // 1. 禁用右键/长按菜单"document.oncontextmenu = function(){return false;};" + // 2. 禁止默认选中启动行为,阻止原生操作栏弹出 //"document.onselectstart = function(){return false;};" + // 3. 禁止默认复制剪切行为"document.oncopy = function(){return false;};" +"document.oncut = function(){return false;};" +"document.onpaste = function(){return false;};" + // 4. 自定义选中文本背景色 + 禁用系统选中呼出菜单"var style = document.createElement('style');"+"style.innerHTML = "+"'*{"+"-webkit-touch-callout:none !important;"+ // 禁用系统长按菜单"-webkit-user-select:text !important;"+ // 允许文字选中"user-select:text !important;"+"}"+"::selection{background:#FFE082!important;color:#000000!important;}" + // 选中背景色"::-moz-selection{background:#FFE082!important;color:#000000!important;}';" +"document.head.appendChild(style);"+ // 5. 自己监听选中变化,给安卓传值"document.onselectionchange = function(){" +"var sel = window.getSelection();"+"var text = sel.toString().trim();"+"if(text.length > 0){" +"var rect = sel.getRangeAt(0).getBoundingClientRect();"+"window.copyAndroid.copyToClipboard(text,rect.left, rect.top, rect.right, rect.bottom);"+"}else{"+"window.copyAndroid.copyToClipboard(text,0,0,0,0);"+"}"+"};"+"})();";mWebView.evaluateJavascript(js,null);}

onPageStarted 方法里面执行 injectDisableContextMenuJS这个方法。在onPageFinished 方法里面执行injectSelectionJS 方法。 Android 注入copyToClipboard方法 获取内容 跟位置。

其中 copyAndroid指的是 mWebView.addJavascriptInterface(newWebViewInterfaceImpl(mContext),"copyAndroid");

Android 端注入copyToClipboard接收方法 获取相关位置坐标实现自定义视图

@JavascriptInterface@Override public voidcopyToClipboard(String text,float left,float top,float right,float bottom){}
http://www.jsqmd.com/news/728133/

相关文章:

  • 【团队绩效域】信息系统项目管理师论文范文
  • 灵活押金——矮萝卜给企业松绑的第一把钥匙
  • 避坑指南:处理CHI电化学数据时,你的Python脚本可能遇到的5个常见错误
  • 别再为蓝牙数据格式发愁了!UniApp连接BLE设备,手把手教你搞定ArrayBuffer与16进制转换
  • 紧急预警:未嵌入成本控制的偏见检测=无效合规!R语言实时资源监控统计管道(含GPU/FLOPs联动计量模块)
  • 从‘拍电影’到‘做游戏’:手把手教你用UE5关卡蓝图实现摄像机平滑切换与镜头混合
  • 长安链开源训练营结营仪式报名!颁发证书 | 技术分享 | 现场抽奖
  • YOLO Face:如何在复杂场景下实现工业级人脸检测系统
  • Acrobat Pro隐藏技能:写几行JavaScript,把PDF书签变成可打印的目录页
  • 2026届必备的六大降重复率神器解析与推荐
  • 别再折腾listings了!用minted包在LaTeX里给Python代码高亮,保姆级配置避坑指南
  • 使用Python快速接入Taotoken聚合大模型API的完整教程
  • 巧固架堆垛技术解析:四家实力企业如何赋能仓储高效升级
  • 【R语言教育实战权威指南】:20年教学专家亲授5大交互式课堂落地模板,错过再等十年?
  • brew@认识homebrew基本概念@国内源配置@加速配置@一键安装方案
  • 思源宋体终极指南:7款免费商用字体快速上手全攻略
  • 不止于采集:将STM32光敏传感器数据上传到串口助手和OLED屏(双显示实战)
  • Git子模块避坑指南:7大陷阱与解决方案
  • 2026年生鲜配送行业靠谱GEO优化服务商选型分析与主流机构解读 - 商业小白条
  • ComfyUI ControlNet Aux深度解析:HED预处理器加载失败的3大解决方案
  • Taotoken用量看板如何帮助团队精细化管理大模型API成本
  • Taotoken 按 token 计费模式对于小型实验性项目的友好性体验
  • 6.人工智能实战:大模型推理延迟不稳定?从“平均耗时正常”到“P99爆炸”的性能抖动问题完整排查与解决方案
  • OpenPLC Editor:如何免费搭建专业级工业自动化编程环境?
  • 从TensorFlow到K230:一个简单线性回归模型的完整部署踩坑记(含onnx维度修正)
  • 使用 Taotoken 为 OpenClaw Agent 工作流配置统一模型接入点
  • PVZTools终极指南:植物大战僵尸修改器完整使用手册
  • 2026年眼镜行业专业AI搜索优化服务商选型分析与核心参考指南 - 商业小白条
  • 告别迷茫!手把手教你用Vector工具链配置Autosar CAN通信(从DBC到代码生成)
  • 学习路之PHP --PHP 常用扩展及作用表