簡體   English   中英

如何在 swift 中使用 URL 獲取 JS 事件處理程序

[英]How to get JS event handler with URL in swift

class 反饋表單視圖控制器: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末尾添加 append 即可: formWebView.configuration.userContentController.addUserScript(script)

另外,您需要將 JS 腳本更改為document.addEventListener('click', function(){ window.webkit.messageHandlers['iosListener'].postMessage('click clack;'); })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM