javascript - 使用 Swift 4 在 WKWebView 中查找单击的单词
问题描述
我正在使用 WKWebKit,并希望添加一个快速点击即可将 HTML 文档中的单词复制到单独视图的功能。
我正在采用的方法是添加一个 TapGestureRecognizer,它又使用 JavaScript 的 document.caretRangeFromPoint() 来定位实际文本。但它没有,我不知道为什么不。
相关代码如下。我保留了一些额外的调试代码,用于打印 document.elementFromPoint() 的值。这总是按预期运行,在页面上返回适当的元素只是为了让我知道视图和位置设置正确。
感谢您的任何帮助,您可以提供。
代码:
@objc public func HandleTapFrom (recognizer : UITapGestureRecognizer)
{
let myView = recognizer.view as? WKWebView
let location: CGPoint = recognizer.location(in: myView)
// .caretRangeFromPoint which never returns anything
var js = String("document.caretRangeFromPoint(\(location.x),\(location.y)).toString()")
myView?.evaluateJavaScript(js) { (result, error) in
print("-------------")
if error != nil {
print("\ncaretRangeFromPoint Error:", error as Any)
} else {
print("\ncaretRangeFromPoint Success:",result as Any)
}
}
// elementFromPoint, which works as expected.
js = String("document.elementFromPoint(\(location.x),\(location.y)).toString()")
myView?.evaluateJavaScript(js) { (result, error) in
if error != nil {
print("\nelementFromPoint Error:", error as Any)
} else {
print("\nelementFromPoint Success:",result as Any)
}
}
}
调试输出:
caretRangeFromPoint Success: Optional()
elementFromPoint Success: Optional([object HTMLSpanElement])
-------------
caretRangeFromPoint Success: Optional()
elementFromPoint Success: Optional([object HTMLElement])
-------------
caretRangeFromPoint Success: Optional()
elementFromPoint Success: Optional(https://developer.mozilla.org/en-US/docs/MDN/Contribute/Guidelines/Conventions_definitions#Experimental)
-------------
caretRangeFromPoint Success: Optional()
elementFromPoint Success: Optional([object HTMLParagraphElement])
解决方案
推荐阅读
- java - 将列表项从 html 表保存到 Mysql
- spring-boot - FF4j Web 控制台未正确显示
- php - 如何在 PHP 中将 3D (PSD2) 安全支付认证与 PayPal 集成
- android - 如何在 StaggeredGridLayout 中自定义放置项目?
- java - Google Ads API 提供的预测指标与网络 UI 中的预测指标完全不同
- sql - 是否可以找出用于在 SQL SERVER CLR 中加载程序集的原始路径?
- publish-subscribe - apache beam PubSub 在普通 pubsub 客户端库中读取 withIdAttribute 的替代方案
- c# - 使用 lambda 根据楼层数格式化我的字符串
- xaml - Blend For Visual Studio 2019 中缺少资源选项卡
- javascript - 如何让 url 参数出现在没有 php 的 html 页面上