Я разрабатываю приложение ios, которое использует WKWebview для отображения моего веб-приложения. У меня есть простая кнопка в моем веб-интерфейсе, которая отправляет сообщение в WKWebview через window.webkit.messageHandlers.isLocationPresent.postMessage("checkLocation")
.
IOS Swift
На мой взгляд DidLoad
let configuration = WKWebViewConfiguration()
let controller = WKUserContentController()
// name of handler called from js code
controller.add(self,name: "isLocationPresent")
configuration.userContentController = controller
let webView = WKWebView(frame: self.view.frame,configuration:configuration)
На стороне ios я реализовал userContentController через
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "isLocationPresent" {
// my logic for checking if location service is available
// if location is present the method returns true else false
let isGpsAvailable:Bool = self.checkLocationServiceState()
if isGpsAvailable {
webView.evaluateJavaScript("sendComment(\(isGpsAvailable ))", completionHandler: {(result,error) in
print(result)
print(error)
})
}
else{
// perform other logic there
}
}
}
Javascript
document.getElementById('click').onclick = function() {
window.webkit.messageHandlers.isLocationPresent.postMessage("checkLocation").
}
function sendComment(aval) {
if(aval) {
makeRequest()
}
else {
// logic to handle if false
}
}
Но каждый раз, когда я нажимаю кнопку, valuJavascript всегда выдает ошибку ссылки Javascript: переменная sendComment не найдена.
Веб-приложение является динамическим, каждый HTML-элемент создается javascript.
У меня есть три вида, когда пользователь нажимает на список, он переходит ко второму виду, где отображается кнопка click
.
Итак, вызов веб-просмотра при загрузке страницы не будет работать, потому что элемент кнопки не отображается в моем первом представлении
Функция sendComment () должна вызываться ios только при нажатии кнопки на веб-интерфейсе. У меня есть и другие случаи использования, когда вызов функции должен выполняться в ios, когда пользователь выполняет действие только во внешнем интерфейсе.