iOS15下禁用WKWebView链接长按拖放功能无效的解决问询
解决WKWebView禁用链接长按拖放但保留ActionSheet的问题
有效方案:通过WKNavigationDelegate拦截拖放事件
针对iOS15及以上系统,可实现WKNavigationDelegate的指定方法,精准拦截链接的拖放操作,同时保留WKActionSheet的正常功能。
代码实现
首先给WKWebView设置代理:
webView.navigationDelegate = self
然后实现代理方法:
func webView(_ webView: WKWebView, performActionFor hitTestResult: WKHitTestResult, decisionHandler: @escaping (WKActionSheetDecision) -> Void) { // 仅拦截链接的拖放操作 if hitTestResult.type == .link, hitTestResult.action == .drag { decisionHandler(.cancel) } else { // 允许其他所有操作(包括弹出ActionSheet) decisionHandler(.allow) } }
原方法无效的原因
allowsLinkPreview = false:该属性仅用于禁用链接的预览弹窗,和拖放功能无关联,无法阻止拖放。webkitTouchCallout='none':这个CSS属性只能禁用长按弹出的系统菜单(如复制、打开),但iOS15+的链接拖放是独立交互逻辑,不受该属性控制。
说明
此方案仅拦截链接的拖放行为,长按链接后依然能正常弹出包含“打开”“复制链接”等选项的WKActionSheet,完全匹配需求。
内容的提问来源于stack exchange,提问作者Rascal
相关产品推荐
相关产品推荐

