【问题标题】:WKWebview allowsLinkPreview to false breaks text selectionWKWebview 允许LinkPreview 假断文本选择
【发布时间】:2020-07-21 05:10:00
【问题描述】:

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

我在字里行间想出了这个理论阅读in the documentation:

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

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

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

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

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

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

更新 2 同样,我可以使用-webkit-user-drag: none; 来禁用链接的拖动,但了解一个非 CSS 修复程序对于我看来像是 Apple 错误的问题仍然很有用。

【问题讨论】:

    标签: ios swift wkwebview 3dtouch ios13.4


    【解决方案1】:

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

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

    【讨论】:

    • 这确实看起来像我的错误。谢谢。
    • 我们知道这些问题什么时候修复吗?
    【解决方案2】:

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

    wkwebview.UIDelegate = self;
    

    ...

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

    【讨论】:

    • 感谢您的回复。我想我试过了,但我不能确定。由于该 API 已被弃用,因此我使用了现代替代品 webView(_:contextMenuConfigurationForElement:completionHandler:),我认为它会具有相同的行为。我得试一试,看看它是否是解决问题的替代方案。
    • @JonBrooks 你让它和webView(_:contextMenuConfigurationForElement:completionHandler:)一起工作了吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2015-05-29
    相关资源
    最近更新 更多