给定一个网页,我想提取文本以供读者查看。我知道 SFSafariViewController
提供阅读器模式,但对于我的应用程序,我需要实际的文本字符串。我也知道 Mercury parser ,但我更喜欢在本地运行的解决方案。
我尝试了很多选择:
DZReadability (它有效,但输出通常不是很好,比 Safari 的阅读器差很多)
Mozilla Readability (我无法让它在 iOS 下运行)
- > luin/Readability (我很努力,但我无法让它在 iOS 下运行)
luin/Readability
看起来很有趣。它似乎是一个非常活跃的 Github 项目。但是,我无法让它在 iOS 下工作。我尝试/做了什么:
我安装并使用了 browserify
来获取一个独立的 JavaScript 文件。但是,我收到一条错误消息 Error: Mismatched anonymous define() module
。我读到这个问题可以通过使用 derequire
来解决。我试过了,但没有成功。
谁能给我一些关于如何使 luin/Readability 在 iOS 上工作的建议,可能是通过使用 browserify
或任何其他方式?
最佳答案
我在需要将 Readability 中的 HTML 呈现为 TextView 的项目中遇到了类似的问题。我最初的方法是使用 WKWebView
进行渲染,方法是使用 WKWebView
的 evaluateJavaScript
注入(inject)稍微修改过的 Mozilla Readability。
Mozilla Readability 代码存储为本地文件,并通过附加以下代码进行了修改:
// Execute Readbility on the currently loaded DOM
var uri = {
spec: location.href,
host: location.host,
prePath: location.protocol + "//" + location.host,
scheme: location.protocol.substr(0, location.protocol.indexOf(":")),
pathBase: location.protocol + "//" + location.host + location.pathname.substr(0, location.pathname.lastIndexOf("/") + 1)
}; var documentClone = document.cloneNode(true); var article = new Readability(uri, documentClone).parse(); article;
然后使用 DTCoreText
呈现生成的内容。 WKWebView
将加载网页的所有资源,包括所有图像、广告等。这使得该方法非常占用内存,我尝试通过在将图像传递给 WKWebView
之前解析和删除图像来规避此问题>。总的来说这是有效的,但根据您的用例,可能不是很优雅或很快。
目前我正在使用一种不同的方法,它涉及使用 phantomJS 在服务器上运行 luis Readability,这在内容提取方面提供了更好的结果,并且在客户端上占用的内存更少。
关于javascript - 如何获得一个好的 iOS 网络阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41379338/