从当前UIWebview读取HTML

4

我有一个UIWebview显示一些链接,当我点击链接时,它会向我发送一些JSON数据。为了显示发送给我的数据,我需要:

1)检测链接何时被调用

2)获取JSON数据

对于第2个问题,我尝试了[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];,它返回给我:

<pre style="word-wrap: break-word; white-space: pre-wrap;">{some JSON}</pre>

[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(\"pre\")"]; 返回了一个空对象。我还有什么其他方法可以获取我的JSON?

对于问题1),是否有一种UIWebView委托方法可以检测到链接被调用?


使用(UIWebViewNavigationType)navigationType来检测链接是否被点击
例如 navigationType == UIWebViewNavigationTypeLinkClicked
- Injectios
1
嘿,Nicolas,你找到答案了吗?似乎没有人理解你的问题,我也像你一样在从UIWebView中读取JSON时遇到了麻烦。 - hybridcattt
我有完全相同的输出,我想仅获取JSON对象。 - sAguinaga
我有完全相同的输出 http://stackoverflow.com/questions/34351024/ios-how-to-read-json-from-custom-uiwebview-auth - Tariq
2个回答

4
我有同样的问题。我通过以下代码解决了它。
    NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(\"pre\")[0].innerHTML"];

0

iOS开发者库是你最好的朋友。事实证明UIWebView确实有一个你可以订阅的协议。 这里是委托回调的链接:http://developer.apple.com/library/ios/#documentation/uikit/reference/UIWebViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/UIWebViewDelegate

你想要的那个是

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

实现此协议方法,您可以内省NSURLRequest对象以获得其NSURL,然后其余部分由您决定...

编辑: 为了完整起见,我应该提及NSURLRequest对象上的-(NSData *)HTTPBody实例方法。您最有可能在这段NSData中找到JSON。 Foundation框架中有一个NSJSONSerialization类,您可以使用它将JSON数据创建为NSObject。 这是你目前的成果...

// UIWebView delegate method
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
  NSData *jsonData = request.HTTPBody;
  id jsonObj = [NSJSONSerialization JSONObjectWithData: jsonData options: NSJSONReadingMutableContainers error: nil];
  // do stuff with the object...
  ...
  // the webview shouldn't load the request since it's going to be raw json data (or is it)
  return NO;
}

在理论上,这段代码应该是有效的,但只有当您接收到的JSON数据是纯JSON时才能有效。从您的问题中,似乎有一些HTML附加在JSON数据中,因此您将必须实现一种方法来剥离数据的HTML部分。请注意,在转换数据结构方面存在许多细节。查看NSJSONSerialization文档以获取更具体的信息:http://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html 编码愉快!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接