我正在使用iOS 4.3&我想知道是否有任何方法可以访问Safari's "Reader" feature,通过该网页删除广告&其他riff raff&内容占据了中心舞台。
如果在Safari中打开任何文章(在维基百科网站上),则会在URL栏上显示“阅读器”按钮。点击它会显示一个新窗口,精美地呈现内容。
如何通过UIWebView
?
PS:我知道有一种名为Readability Project的东西。但我不知道如何通过UIWebView
使用它。另外对于某些网站,Safari的读者接听电话不启用“读者”功能,也许它没有足够的信心?
答案 0 :(得分:10)
重要提示:此答案不再有效!
可读性在 2016年9月30日关闭。
以下是他们推荐的替代品: https://mercury.postlight.com/web-parser/
保持答案作为历史参考
---原始答案---
您可以使用Readability mobilizer。您将获得可读性样式的任何文章的清理版本:
http://www.readability.com/m?url=http://{URLOFTHEARTICLE}
只需准备好URL并将其加载到UIWebView中。以下是它的实际行动:
答案 1 :(得分:4)
Apple在iOS 5中包含“Reader”是一个非常重要的事情。我假设噪音在4.3中没有。
re:如何通过UIWebView
答案 2 :(得分:3)
不要在iOS上本地解析HTML,我以前做过它并且它是一个混乱的业务。要么创建自己的Web服务来完成所有讨厌的工作,要么使用可读性(readability.com)来提供API。 还有一个开源的ruby,python和php可读性端口,你可以在这里找到
https://github.com/iterationlabs/ruby-readability
https://github.com/gfxmonk/python-readability
http://code.fivefilters.org/p/php-readability/source/tree/master/
对于红宝石爱好者来说,可读性也可用作宝石,只需谷歌即可。
答案 3 :(得分:1)
实际上,阅读器按钮会在解析HTML页面时进行一些分析,然后它会看到一个清晰的正文标记进行解析。如果该插件能够提取确切的主体,它将启用阅读器按钮(我从可读性源代码中理解)。现在要为webview实现相同的功能,你只需要在代码中嵌入java脚本(这个java脚本已经在可读性源代码中可用),然后你就可以达到同样的效果。
但我怀疑苹果的未来计划是一样的。因为他们不能让其他任何人通过与iCloud相关的巨大商机与可读性相结合来进行内容提取。
如果您愿意,可以从UIWebView中简单地提取HTML,然后提取正文并将其用于您的目的。提取它并不是一门非常火箭的科学。
从分析的角度来看,只需要随机启用阅读器按钮的10个HTML页面,你会看到核心的cotent只属于body,其余的add,header,footer是分开的。
我认为现在是重新发明我们使用的网络内容的时候了,这是做同样事情的完美例子。
答案 4 :(得分:0)
你甚至可以通过注入javascript来实现这一点。
#define readJS @"(function(){window.baseUrl='https://www.readability.com';window.readabilityToken='';var s=document.createElement('script');s.setAttribute('type','text/javascript');s.setAttribute('charset','UTF-8');s.setAttribute('src',baseUrl+'/bookmarklet/read.js');document.documentElement.appendChild(s);})()"
然后当您的网页完成加载时
- (void)webViewDidFinishLoad:(UIWebView *)webview
{
[webview stringByEvaluatingJavaScriptFromString:readJS];
答案 5 :(得分:0)
你可以在iOS9中完成。 首先导入SafariServices:
#import <SafariServices/SafariServices.h>
之后我们将实例化SFSafariViewController并将其添加为子视图。我们有两种选择:
NSString *sURL = @"http://google.com"; NSURL *URL = [NSURL URLWithString:sURL]; SFSafariViewController *safari = [[SFSafariViewController alloc] initWithURL:URL]; // 1. SFSafariViewController *safari = [[SFSafariViewController alloc] initWithURL:URL entersReaderIfAvailable:YES]; // 2. [self presentViewController:safari animated:YES completion:nil];