2013-07-11 47 views
3

我有一個顯示一些鏈接的UIWebview。當我點擊一個鏈接時,它給我一些JSON。爲了顯示發送到我的數據,我需要:從當前UIWebview讀取HTML

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委託方法來檢測鏈接被調用?

+0

爲了檢測鏈路解決被點擊使用 (UIWebViewNavigationType)navigationType e.g navigationType == UIWebViewNavigationTypeLinkClicked – Injectios

+1

嘿尼古拉斯,你有沒有找到答案?似乎沒有人理解你的問題,而且我正遇到麻煩,就像你一樣從UIWebView讀取JSON。 – hybridcattt

+0

我有相同的確切的輸出,我試圖獲得只是JSON對象。 – sAguinaga

回答

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,然後剩下的就看你..

編輯: 爲了完整起見,我應該提到- (NSData *)HTTPBodyNSURLRequest對象的實例方法。你很可能會在這段NSData中找到JSON。 Foundation框架中有一個NSJSONSerialization類,您可以使用它來創建NSObject的JSON數據。 這裏是你有什麼那麼遠,

// 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

快樂編碼!

3

我有同樣的問題。我這段代碼

NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(\"pre\")[0].innerHTML"];