如何解析WebView中的数据以在代码中使用

时间:2019-01-17 12:23:47

标签: ios swift wkwebview

我的项目中有一个WKWebView,它会执行一些操作,在单击WKWebView中的Submit之后,它将在javaScript中显示我需要解析代码的JSON数据。

4 个答案:

答案 0 :(得分:0)

您可以使用这段代码以字符串形式获取HTML数据

在目标C中

google.charts.load('current', {
  packages: ['corechart']
}).then(function () {
  var options = {
    height: 350,
    legend: {
      position: 'bottom'
    },
    hAxis: {
      title: 'Years'
    },
    vAxis: {
      title: 'Property Value'
    },
    backgroundColor: '#f1f8e9'
  };

  var chart = new google.visualization.LineChart(document.getElementById('chart_div'));

  $.ajax({
    url: url,
    headers: {
      'X-CSRF-TOKEN': '{{csrf_token()}}'
    },
    type: "POST",
    data: {
      'annual_capital_growth':annual_capital_growth,
      'property': property,
      'forcast_period': forcast_period,
    },
    context: this
  }).done(function (response, status, jqXHR) {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'Years');
    data.addColumn('number', 'Property Name');
    data.addColumn('number', 'Compute Times');
    data.addColumn('number', 'Compute Times2');
    data.addRows(response.graphArray);

    function resize() {
      chart.draw(data, options);
    }
    resize();
    $(window).resize(resize);
  }).fail(function (jqXHR, status, errorThrown) {
    console.log(errorThrown);
  });
});

在Swift中

NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString: @"document.body.innerHTML"];

您必须分析所收到的信息,然后进行相应的处理。

在您的情况下,您可能会在字符串中获取完整的json。

答案 1 :(得分:0)

您可以获取UIWebView页面的源代码。

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    webView.evaluateJavaScript("document.getElementsByTagName('html')[0].innerHTML") { innerHTML, error in
        print(innerHTML!)
    }
}

答案 2 :(得分:0)

您的JSON出现在body标签中,然后使用此代码或从网络侧更改以在body标签中提供JSON

if let html = webView.stringByEvaluatingJavaScript(from: "document.body.innerHTML"){

            let data = html.data(using: .utf8)!
            do {
                if let jsonArray = try JSONSerialization.jsonObject(with: data, options : .allowFragments) as? Dictionary<String,Any>
                {
                    print(jsonArray) // use the json here
                } else {
                    print("bad json")
                }
            } catch let error as NSError {
                print(error)
            }
        }

答案 3 :(得分:0)

Swift 5.1示例:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
        print("redirect didFinish")
        print(webView)
        webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
                                   completionHandler: { (html: Any?, error: Error?) in
                                    print(html as Any)
        })
    }