【问题标题】:Disable link drag on WKWebView [duplicate]禁用 WKWebView 上的链接拖动 [重复]
【发布时间】:2020-08-22 16:54:28
【问题描述】:

我正在使用最新版本的 Xcode 和 Swift。我正在使用以编程方式创建的 WKWebView。

如果我点击一个链接,稍等片刻,然后移动我的手指,我可以拖动(然后放下)一个带有链接标题和链接本身的小框。

澄清一下:我不是指强制触摸,它会显示链接预览和一些操作,例如Ad link to reading list

如何禁用拖动链接行为?

【问题讨论】:

  • 为什么我的问题被否决并建议关闭?

标签: swift xcode ipad drag-and-drop


【解决方案1】:

我在这里找到了解决方案:How to disable iOS 11 and iOS 12 Drag & Drop in WKWebView?

这是我的工作代码:

private func disableDragAndDropInteraction() {
    var webScrollView: UIView? = nil
    var contentView: UIView? = nil
    
    if #available(iOS 11.0, *) {
        guard let noDragWebView = webView else { return }
        webScrollView = noDragWebView.subviews.compactMap { $0 as? UIScrollView }.first
        contentView = webScrollView?.subviews.first(where: { $0.interactions.count > 1 })
        guard let dragInteraction = (contentView?.interactions.compactMap { $0 as? UIDragInteraction }.first) else { return }
        contentView?.removeInteraction(dragInteraction)
    }
}
override func viewDidAppear(_ animated: Bool) {
    disableDragAndDropInteraction()
}

您还必须在初始化WKWebView 后添加disableDragAndDropInteraction(),例如在viewDidLoad()

【讨论】:

  • 在 viewDidLoad() 中调用函数很重要,谢谢?☺️
【解决方案2】:

如果您可以控制加载到 WKWebView 中的 HTML,则可以使用 CSS 属性 webkit-touch-callout,例如:

img, a {
    -webkit-touch-callout: none;
}

还需要将元素的draggable属性设置为false,比如:

<img ... draggable="false">

我猜你也可以使用-[WKWebView evaluateJavaScript(...)] 和家人来注入这些修改。

这将避免依赖脆弱的子视图潜水和操作。

从 iOS 15.3 开始测试。

这里有一些官方(旧)文档:https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariCSSRef/Articles/StandardCSSProperties.html#//apple_ref/doc/uid/TP30001266-_webkit_touch_callout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2018-10-06
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多