Javascript 从UIWebView中获取元素

Javascript 从UIWebView中获取元素,javascript,ios,swift,uiwebview,Javascript,Ios,Swift,Uiwebview,我使用以下方法获得了网页的URL: print(webView.request?.mainDocumentURL) 我想知道如何从UIWebView获取元素,如路径和id(下图所附),我尝试使用以下方法提取它: let html = webView.stringByEvaluatingJavaScriptFromString("document.getElementsByName('json')") 虽然没用 我得到的响应是JSON(有问题的图片),使用shouldStartLoadWit

我使用以下方法获得了网页的URL:

print(webView.request?.mainDocumentURL)
我想知道如何从UIWebView获取元素,如路径和id(下图所附),我尝试使用以下方法提取它:

let html = webView.stringByEvaluatingJavaScriptFromString("document.getElementsByName('json')")
虽然没用


我得到的响应是JSON(有问题的图片),使用shouldStartLoadWithRequest UIWebView委托,使其标识回调url并提取数据,然后将其转换为字典。 “prefs”是默认值,您可以忽略

    func convertStringToDictionary(text: String) -> [String:AnyObject]? {
    if let data = text.dataUsingEncoding(NSUTF8StringEncoding) {
        do {
            return try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String:AnyObject]
        } catch let error as NSError {
            print(error)
        }
    }
    return nil
}


func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {

    let fullNameArr = request.URL!.absoluteString.characters.split{$0 == "?"}.map(String.init)
    let callbackUrl = fullNameArr[0];
    if callbackUrl  == "http://xxxxxxxxxxx:2403/auth/google/callback" {

        webView.stopLoading();
        let url = NSURL(string: request.URL!.absoluteString)
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in

            let datastring = NSString(data: data!, encoding: NSUTF8StringEncoding)
            let responsedata = self.convertStringToDictionary(datastring as! String);

            let userId = responsedata!["uid"]! as! String
            let sessionId = responsedata!["id"]! as! String

            if(sessionId != "") {

                prefs.setObject(userId, forKey: "USERNAME")
                prefs.setObject(sessionId, forKey: "SESSIONID")
                prefs.setInteger(1, forKey: "ISLOGGEDIN")
                prefs.synchronize()

                self.dismissViewControllerAnimated(true, completion: nil)

            } else {

                dispatch_async(dispatch_get_main_queue(), {

                    let alertController = UIAlertController(title: "Sign in Failed!", message: "Failed to retrieve data", preferredStyle: .Alert)
                    let OKAction = UIAlertAction(title: "OK", style: .Default) { (action) in }
                    alertController.addAction(OKAction)
                    self.presentViewController(alertController, animated: true) { }
                })
            }

            dispatch_async(dispatch_get_main_queue(), {
                self.webView.removeFromSuperview()
                self.navigationBar.removeFromSuperview()
            })
        }
        task.resume()
    }
    return true
}