【问题标题】:How to run javascript in a webview from Swift如何在 Swift 的 web 视图中运行 javascript
【发布时间】:2020-07-18 13:51:02
【问题描述】:

我需要我的 swift 类与它引用的 wkwebview 中的 html 和 javascript 进行交互,特别是为它提供一个变量。

我想我会从尝试让 webview 触发警报开始:

代码如下:

let webView = WKWebView()

    override func viewDidLoad() {
      
        super.viewDidLoad()
         webView.uiDelegate = self
        webView.navigationDelegate = self as? WKNavigationDelegate
        if let url = Bundle.main.url(forResource: "tradingview", withExtension: "html") {
            webView.loadFileURL(url, allowingReadAccessTo: url.deletingLastPathComponent())
           
        }
       // Try one way in viewdidload. Compiles but doesn't do anything
         webView.evaluateJavaScript("alert('hello from the webview');");
    }
   
    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
//try another way. Also doesn't do anything
        webView.evaluateJavaScript("alert('hello from webview')"), completionHandler: nil)
    }
    override func loadView() {
        
        self.view = webView
    }

但是,webview 没有触发警报。代码有什么问题,或者您需要做些什么才能让 Swift 在 webview 上运行一些 javascript。

感谢您的任何建议。

【问题讨论】:

    标签: ios swift wkwebview evaluatejavascript


    【解决方案1】:

    你需要将javascript alert中的info转换成原生的UIAlert

    添加WKUIDelegate 中描述的警报处理程序委托。

    func webView(_ webView: WKWebView,
                 runJavaScriptAlertPanelWithMessage message: String,
                 initiatedByFrame frame: WKFrameInfo,
                 completionHandler: @escaping () -> Void) {
    
        let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
        let title = NSLocalizedString("OK", comment: "OK Button")
        let ok = UIAlertAction(title: title, style: .default) { (action: UIAlertAction) -> Void in
            alert.dismiss(animated: true, completion: nil)
        }
        alert.addAction(ok)
        present(alert, animated: true)
        completionHandler()
    }
    

    然后像下面这样调用(你的代码中有一个类型);

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        webView.evaluateJavaScript("alert('hello from the webview')")
    }
    


    另外

    有一个示例project 模拟了本地和网络之间的双向通信。

    【讨论】:

    • 好的。你已经回答了这个问题,所以要标记它是正确的。我不知道那个委托方法。但我真正的目标是从 Swift 将变量传递给 webview 并在 webview 上运行脚本。你能建议怎么做吗?
    • 您问的问题是关于显示警报。所以,首先,如果你说的答案对你有用,请不要忘记标记为接受。这个post可以帮助你在webview和native之间建立通信。
    • 无法获得工作链接中的示例。您能否提供一个从 swift 调用 evaluateJavaScript() 以在 webview 中运行 javascript 的简单示例?如果您愿意,我可以提出单独的问题
    • 有一个示例project 模拟双向通信。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    相关资源
    最近更新 更多