javascript - 如何在 WKWebView 中禁用复制和粘贴(标注/弹出)?
问题描述
我想禁用标注菜单,如果您在 web 视图中长按一个元素,它会弹出:
有很多像这样的答案,但它们似乎都不起作用。不知道这些东西UIWebView
是否也适用于WKWebView
...
我试图通过 JavaScript 操作 CSS。这似乎仅在您将脚本添加到WKUserContentController
而不是在didFinish()
.
不起作用的事情:
window.getSelection().removeAllRanges();
document.body.style.webkitTouchCallout='none';
document.body.style.webkitUserSelect='none';
部分有效的事情:
var style = document.createElement('style');
style.innerHTML = '* { -webkit-touch-callout: none; -webkit-user-select: none; }';
document.getElementsByTagName('head')[0].appendChild(style);
或以 CSS 形式
*:not(input):not(textarea) {
-webkit-user-select: none; /* disable selection/copy of UIWebView */
-webkit-touch-callout: none; /* disable the iOS popup when long-press on a link */
}
只有类似*
或*:not(input):not(textarea)
似乎有效的东西(没有body
或其他特定标签)。这样做的问题是,通过这个禁用了这么多元素......我只需要在某些特定元素上使用它!
我也尝试使用canPerformAction()
:
private static readonly Selector copyAction = new Selector("copy:");
private static readonly Selector pasteAction = new Selector("paste:");
private static readonly Selector cutAction = new Selector("cut:");
public override bool CanPerform(Selector action, NSObject withSender)
{
if (action == copyAction || action == pasteAction || action == cutAction)
{
System.Diagnostics.Debug.WriteLine(action.Name);
}
return false;
}
这里似乎链中的另一个响应者正在返回 true 并覆盖我的设置。弹出/标注菜单仍然出现。我只是尽量减少可用选项(如上面的屏幕所示)。
我唯一可以尝试的是使用手势识别器来禁用这种点击,但目前我不知道如何。
我该怎么做才能禁用弹出/标注菜单?
解决方案
我尝试覆盖在 UIWebView 中运行良好的方法 canPerformAction,但在 WKWebView 上不起作用。
override func canPerformAction(_ action: Selector, withSender sender: Any?) -> Bool {
if action == #selector(UIResponderStandardEditActions.cut(_:)) ||
action == #selector(UIResponderStandardEditActions.copy(_:)) ||
action == #selector(UIResponderStandardEditActions.selectAll(_:)) ||
action == #selector(UIResponderStandardEditActions.select(_:)) {
return false
}
return super.canPerformAction(action, withSender: sender)
}
推荐阅读
- kotlin - Kotlin:如何获取方法参数的类型
- javascript - WebGL 渲染循环性能
- django - Django Rest Framework Serializer - 如何在无效时允许忽略可选字段?
- amazon-web-services - 使用 AWS SSO 时如何撤销用户会话?
- d3.js - Highcharts - 具有 y 轴值的时间序列图表需要与文本标签分组
- android - MotionLayout中touchAnchorSide的作用是什么?
- angular - Ionic:错误:NgModule 'AppModule' 的提供程序无效
- postgresql - postgresql 请求数据库sql
- python - 从多个子图之一共享轴
- maven - 在 JitPack 和其他存储库之间保持 jar 版本号同步