使用UIWebView访问文档层次结构

时间:2012-04-19 19:15:36

标签: iphone macos cocoa-touch uiwebview

在Cocoa中,有没有办法通过UIWebView或其他方式访问HTML文档的对象层次结构?例如,我想获取一个HTML文件并提取所有图像(<img>),所有链接(<a href>)等的列表及其相关属性(src =“”, href =“”,style =“”......等等。

其次,假设我有一个html页面,其中的图像没有与之关联的样式信息(普通的旧<img src="">标记)。在所述UIWebView中呈现页面后,是否有可能确定任何继承的属性,甚至可能是屏幕上显示的大小?

1 个答案:

答案 0 :(得分:1)

看看stringByEvaluatingJavaScriptFromString:。您可以使用它来运行找到您感兴趣的标记的脚本,然后将您感兴趣的数据作为字符串返回。如果你想一次抓取大量数据,那么当你传递它时,使用JSON可能最容易。一个例子:

NSString *jsonString = [webView stringByEvaluatingJavaScriptFromString:@"var result = {}; var imgs = document.getElementsByTagName('img'); for (x = 0; x < imgs.length; x++) { result[x] = {'src': imgs[x].src, 'width': imgs[x].offsetWidth, 'height': imgs[x].offsetHeight}; } result = JSON.stringify(result);"];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *error = nil;
NSArray *imgArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

所以,现在你有NSArray所有图像都是你感兴趣的属性。注意NSJSONSerialization确实需要iOS 5或OS X 10.7,尽管有third-party libraries如果您需要支持早期的OS版本,请在那里。 (stringByEvaluatingJavaScriptFromString:回到iOS 2.0和10.2.7。)