Javascript 从UIWebView中获取元素
我使用以下方法获得了网页的URL: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
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
}