【问题标题】:iOS access to Safari Reader feature through UIWebViewiOS 通过 UIWebView 访问 Safari Reader 功能
【发布时间】:2011-12-01 05:38:48
【问题描述】:

我正在使用 iOS 4.3,我想知道是否有任何方法可以访问 Safari's "Reader" feature,通过它可以删除网页中的广告和其他 riff raff,并且内容占据中心位置。

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

如何通过UIWebView 在 iOS 中利用此功能?

PS:我知道有一个东西叫Readability Project。但我不知道如何通过UIWebView 使用它。还有一些网站Safari的Reader接电话不开启“Reader”功能,可能是信心不足?

【问题讨论】:

  • 为什么 -ve 投票?人怎么了?

标签: objective-c ios uiwebview safari readability


【解决方案1】:

Apple 非常重视在 iOS 5 中包含“Reader”。我假设它在 4.3 中不可用

re: 如何通过UIWebView使用

【讨论】:

    【解决方案2】:

    实际上,阅读器按钮在解析 HTML 页面时会进行一些分析,然后会看到要解析的清晰正文标记。如果该插件能够提取确切的正文,它将启用阅读器按钮(我对可读性源代码的理解)。现在要为 webview 实现相同的功能,您只需在代码中嵌入 java 脚本(该 java 脚本已经在可读性源代码中可用),然后您就可以达到相同的效果。

    但我怀疑苹果的未来计划也是如此。因为他们不能让其他任何人来做这个内容提取,同时与 iCloud 相关的巨大商机与可读性相结合。

    如果您愿意,您可以简单地从 UIWebView 中提取 HTML,然后提取正文并将其用于您的目的。提取它并不是一门火箭般的科学。

    从分析的角度来看,随便有10个启用阅读器按钮的HTML页面,你会看到核心内容只属于正文,其余的添加、页眉、页脚是分开的。

    我相信现在是重新发明我们使用的网络内容的时候了,这是这样做的完美例子。

    【讨论】:

      【解决方案3】:

      不要在 iOS 上本地解析 HTML,我以前做过,而且它是一项混乱的业务。要么创建自己的 Web 服务来完成所有令人讨厌的工作,要么研究使用它们提供的 API 的可读性(readability.com)。 还有一个开源 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/

      对于 ruby​​ 爱好者,可读性也可以作为 gem 获得,只需 google 即可。

      【讨论】:

        【解决方案4】:

        您甚至可以通过注入 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】:

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

          可读性已于 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

          【讨论】:

          • 如何让“清理后的版本”在 UIWebView 中看起来不错?我让它在我的应用程序中工作,但我希望字体/样式看起来不错。
          【解决方案6】:

          你可以在 iOS9 中做到这一点。 首先导入 SafariServices:

          #import <SafariServices/SafariServices.h>
          

          之后我们实例化 SFSafariViewController 并将其添加为子视图。我们有两种选择:

          • 仅使用基本 URL 创建
          • 使用基本 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];
          

          【讨论】:

          • SFSafariViewController 从 iOS 9 开始可用,在旧系统上这会导致崩溃。
          猜你喜欢
          • 2017-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-29
          • 2021-01-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多