如何在swift中获取带有URL的JS事件处理程序



class FeedBackFormViewController:UIViewController,WKUIDelegate,WKScriptMessageHandler{

@IBOutlet weak var webViewShowing: UIView!
var formWebView: WKWebView!
private let fileString = UserSingleton.shared.feedbackFormLink
override func viewDidLoad() {
super.viewDidLoad()
setupJSFile()
formWebView.navigationDelegate = self
previewFiles()
}
// show files in web view
private func previewFiles() {
if let fileString = fileString, fileString != "" {
let url = URL(string: fileString)
let myRequest = URLRequest(url: url!)
UserSingleton.shared.showHUD()
formWebView.load(myRequest)
}else {
Alerts.shared.show(alert: .error, message: "no file found", type: .error)
}
}
private func setupJSFile() {
let config = WKWebViewConfiguration()
let js = "document.addEventListener('submit', function(){ window.webkit.messageHandlers.clickListener.postMessage('My hovercraft is full of eels!'); })"
let script = WKUserScript(source: js, injectionTime: .atDocumentEnd, forMainFrameOnly: false)
config.userContentController.addUserScript(script)
config.userContentController.add(self, name: "submit")
formWebView = WKWebView(frame: UIScreen.main.bounds, configuration: config)
webViewShowing.addSubview(formWebView)
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.name)

}
@IBAction func dismissFeedbackFormVC(_ sender: UIButton) {
self.dismiss(animated: true, completion: nil)
}

}

扩展FeedBackFormViewController:WKNavigationDelegate{

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!){

webView.evaluateJavaScript("document.readyState") { (result, error) in
if let result = result {
print(result)
}
}
}

}

只有在加载web视图时才调用wk导航,并且我在任何位置单击userContentController中没有触发调用任何事件

您需要添加此脚本来执行,只需将其附加在func setupJSFile的末尾即可:formWebView.configuration.userContentController.addUserScript(script)

此外,您还需要将JS脚本更改为document.addEventListener('click', function(){ window.webkit.messageHandlers['iosListener'].postMessage('click clack!'); })

最新更新