WKWebview允许LinkPreview假中断文本选择



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

我从文件中的字里行间得出了这个理论:

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

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

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

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

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

UPDATE
由于我控制应用程序的内容,我可以使用以下css禁用图像的按住:-webkit-touch-callout: none;所以我剩下的问题只是不允许从WKWebView拖动交互到应用程序之外。

UPDATE 2类似地,我可以使用-webkit-user-drag: none;来禁用拖动链接,但了解一个非css修复程序对我来说像是苹果漏洞仍然很有用。

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

wkwebview.UIDelegate = self;

- (BOOL)webView:(WKWebView *)webView shouldPreviewElement:(WKPreviewElementInfo *)elementInfo API_AVAILABLE(ios(10.0)) {
return NO;
}

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

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

最新更新