Я использую 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])