【问题标题】:Accessing document hierarchy with UIWebView使用 UIWebView 访问文档层次结构
【发布时间】:2012-04-19 19:15:35
【问题描述】:

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

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

【问题讨论】:

    标签: iphone macos cocoa-touch uiwebview


    【解决方案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支持较早的操作系统版本。 (stringByEvaluatingJavaScriptFromString: 回到 iOS 2.0 和 10.2.7。)

    【讨论】:

    • 太棒了!哈哈,这让我的生活变得轻松多了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多