【问题标题】:Detect change in WebView URL with Swift使用 Swift 检测 WebView URL 的变化
【发布时间】:2018-05-30 19:31:45
【问题描述】:

我正在创建一个hybrid app 并尝试将一些数据从 WebView 传递到本机应用程序。

我能想到的最佳方法是使用URL variables,然后在 Swift 中为 URL 添加一个侦听器以获取新数据。

当 WebView 首次加载此 Swift 代码时,我能够从它获取 URL 变量...

func webViewDidFinishLoad(_ webView: UIWebView) {

   print(getQueryStringParameter(url: (webView.request?.url?.absoluteString)!, param: "id"));

}
func getQueryStringParameter(url: String, param: String) -> String? {
    guard let url = URLComponents(string: url) else { return nil }
    return url.queryItems?.first(where: { $0.name == param })?.value
}


这很好用,但我似乎无法找到一个 WebView 侦听器来检测何时在页面加载后通过 JS 添加新的 URL 变量。这是那个JS...

window.history.replaceState(null, null, "?id=mydata");

有什么想法可以在 Swift 中聆听吗?或者有没有更好的方法将数据从 Web 视图传递到本机应用程序?

【问题讨论】:

  • 你可以让你的视图控制器成为你的WKWebView Navigation的代理,实现方法func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {,检查导航类型和请求url

标签: javascript ios swift xcode url


【解决方案1】:

你可以完成你正在寻找的这段代码。

您需要使用 WKWebView 并实现各自的委托。

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("finish to load")
        if webView.url!.absoluteString.range(of: "ADD_STRING_TO_BE_CHECKED_HERE") != nil
        {
            print("Success")

            //DO WHAT YOU NEED HERE
        }
    }

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    相关资源
    最近更新 更多