5

我们有一个使用 WKWebview 的应用程序,但设置allowsLinkPreviewfalse因为我们不想要链接预览行为。似乎从 iOS 13.4 开始,在没有3D 触摸功能的设备(旧设备和新 iPhone 型号)上,设置allowsLinkPreview为 false也会禁用页面中的所有文本选择!对于我们的应用程序,文本选择至关重要。

我在文档的字里行间提出了这个理论阅读:

在 iOS 中,此属性在支持 3D Touch 的设备上可用。

在运行 iOS 13 及更高版本的设备上,无论设备是否支持 3D Touch,人们都可以使用长按手势打开上下文菜单。在 3D Touch 设备上,手势可以更快地显示上下文菜单。

禁用链接预览会禁用 web 视图中的所有按住手势,这似乎是一个错误。

我能想出的唯一解决方法是设置allowsLinkPreviewtrue,然后通过WKUIDelegate 协议禁用上下文菜单。这会禁用单击链接的弹出窗口,但不会禁用单击图像的弹出窗口。而且,它仍然允许用户将链接拖放到 safari 中的分屏视图中,这是我们不想要的。

任何关于如何完全禁用链接预览/上下文菜单/拖放行为同时仍然允许文本选择的建议将不胜感激!

更新
由于我控制了我的应用程序的内容,我可以通过使用以下 css 来禁用图像的按住:-webkit-touch-callout: none; 所以我剩下的问题就是禁止将交互从WKWebView.

更新 2 同样,我可以-webkit-user-drag: none;用来禁用链接的拖动,但知道一个非 css 修复对我来说似乎是一个 Apple 错误仍然很有用。

4

2 回答 2

2

这可能与一个已知的 Webkit 错误有关,该错误可能已经修复(在撰写本文时):

https://bugs.webkit.org/show_bug.cgi?id=210191

于 2020-04-24T22:09:30.937 回答
1

我遇到了同样的问题,这就是我解决它的方法。

wkwebview.UIDelegate = self;

...

- (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo API_AVAILABLE(ios(10.0)) {
    return NO;
}
于 2020-04-19T17:44:21.187 回答