iOS通过UIWebView访问Safari Reader功能

时间:2011-10-05 06:37:26

标签: objective-c ios uiwebview safari readability

我正在使用iOS 4.3&我想知道是否有任何方法可以访问Safari's "Reader" feature,通过该网页删除广告&其他riff raff&内容占据了中心舞台。

如果在Safari中打开任何文章(在维基百科网站上),则会在URL栏上显示“阅读器”按钮。点击它会显示一个新窗口,精美地呈现内容。

如何通过UIWebView

在iOS中利用此功能

enter image description here

PS:我知道有一种名为Readability Project的东西。但我不知道如何通过UIWebView使用它。另外对于某些网站,Safari的读者接听电话不启用“读者”功能,也许它没有足够的信心?

6 个答案:

答案 0 :(得分:10)

重要提示:此答案不再有效!

可读性在 2016年9月30日关闭

以下是他们推荐的替代品: https://mercury.postlight.com/web-parser/

保持答案作为历史参考

---原始答案---

您可以使用Readability mobilizer。您将获得可读性样式的任何文章的清理版本:

http://www.readability.com/m?url=http://{URLOFTHEARTICLE}

只需准备好URL并将其加载到UIWebView中。以下是它的实际行动:

http://www.readability.com/m?url=http%3A%2F%2Fwww.cnn.com%2F2013%2F01%2F11%2Fshowbiz%2Ftv%2Fgolden-globes-tv-vineyard%2Findex.html%3Fhpt%3Dhp_abar

答案 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并将其添加为子视图。我们有两种选择:

  • 仅使用基本网址创建
  • 使用bas URL创建,并在可用时输入“阅读模式”
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];