Поиск слова с одним нажатием в WKWebView с помощью Swift 4 - PullRequest
0 голосов
/ 27 апреля 2018

Я использую 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...