2016-12-29 3 views
0

Учитывая веб-страницу, я хотел бы извлечь текст для просмотра. Я знаю, что предлагает режим чтения, но для моего приложения мне нужна фактическая текстовая строка. Я также знаю Mercury parser, но я предпочитаю решение, которое выполняется локально.Как получить хороший веб-ридер для iOS

я пытался много вариантов:

  • DZReadability (он работает, но выход часто не очень хорошо, гораздо хуже, чем читатель Safari)

  • Mozilla Readability (я не мог сделать это работать под прошивкой)

  • luin/Readability (я очень старался, но я не мог заставить его работать под прошивкой)

luin/Readability выглядит очень интересно. Это очень активный проект Github. Однако я не мог заставить его работать под iOS. Что я пытался/сделал:

Я установил и использовал browserify, чтобы получить автономный файл JavaScript. Однако, я получил сообщение об ошибке Error: Mismatched anonymous define() module. Я читал, что эту проблему можно решить, используя derequire. Я попробовал, но ничего не получилось.

Может ли кто-нибудь дать мне совет о том, как сделать работу luin/Readability на iOS, возможно, используя browserify или любым другим способом?

ответ

1

У меня была аналогичная проблема в моем проекте, которая должна была отображать HTML из Readability как TextView. Мой первоначальный подход заключался в рендеринге с использованием WKWebView путем ввода слегка модифицированной читаемости Mozilla с использованием evaluateJavaScript из WKWebView.

Mozilla Удобочитаемость код был сохранен в качестве локального файла и был изменен путем добавления следующий код:

// 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. В целом это работает, но в зависимости от вашего варианта использования может быть не слишком изящным или быстрым.

В настоящее время я использую другой подход, который включает в себя запуск Luis Readability на сервере с использованием phantomJS, который дает лучшие результаты с точки зрения извлечения контента и на сервере гораздо меньше памяти.