Як працює подання зчитувача Firefox


78

Резюме

Я шукаю критерії, за якими я можу створити веб-сторінку та бути [досить] впевненим, що вона з’явиться у поданні Firefox Reader , за бажанням користувача.

Деякі сайти мають цю опцію, інші - ні. У деяких із більшою кількістю тексту ця опція відсутня, ніж у інших із значно меншою кількістю тексту. Наприклад, переповнення стека відображає лише запитання, а не відповіді у поданні Reader View.

Питання

У мене було оновлено Firefox з 38.0.1 до 38.0.5, і я знайшов нову функцію, яка називається ReaderView - це своєрідне накладання, яке усуває "захаращення сторінок" і полегшує читання тексту. Readerview знаходиться у правій частині адресного рядка як піктограму, на яку можна натиснути на певних сторінках.

Це нормально, але з точки зору програмування я хочу знати, як працює "подання читача", до яких критеріїв яких сторінок це стосується. Я провів деякі дослідження веб-сайту Mozilla Firefox, не маючи чітких відповідей (обробляв усі відповіді на програмування будь-якого роду, які я знайшов), я, звичайно, погуглив / змішав це, і це повернулося лише з посиланнями на аддони Firefox - це не аддон але основна частина нової версії Firefox.

Я висловив припущення, що читання використовувало HTML5 і витягувало <article>вміст, але це не так, оскільки це працює у Вікіпедії, яка, схоже, не використовує <article>або подібні теги HTML5, натомість readview витягує певні <div>s та відображає їх окремо. Ця функція працює на деяких сторінках HTML5, таких як wikipedia, але не на інших.

Якщо хтось має ідеї, як насправді працює Firefox ReaderView і як цю операцію можуть використовувати розробники веб-сайтів, чи можете ви поділитися? Або якщо ви можете знайти, де ця інформація може бути розташована, ви можете вказати мені в правильному напрямку - оскільки мені не вдалося знайти це.


7
Джерело бібліотеки, що використовується Firefox Reader View, знаходиться на GitHub за адресою github.com/mozilla/readability, якщо це допомагає ...
Річард Ніш

дякую @RichardNeish - подивившись на це, незрозуміло, це зачищений <div>і / або <article>та / або <p>та кілька інших тегів. Мені потрібно буде прочитати це, коли завтра я свіжий ... .
Мартін

Не могли б ви записати свої висновки як відповідь? Мені було б цікаво почути, як це працює.
Річард Ніш

2
FYI @RichardNeish, Читання через код GitHub, вранці, процес є те , що сторінка елементи перераховані в порядку правдоподібності - з <section>, <p>, <div>, <article>у верхній частині списку (тобто , швидше за все) , а потім кожен з цих «вузлів» є дається оцінка на основі таких речей, як кількість зап'ястей та назви класів, що застосовуються до вузла. Значення оцінки вирішує, чи можна HTML-сторінку "переглядати сторінку" у Firefox. Мені не зовсім зрозуміло, чи значення оцінки встановлюється Firefox або функцією читабельності. Javascript насправді не є моєю сильною стороною, тому хтось інший повинен перевірити це.
Мартін

Відповіді:


65

Вам потрібен принаймні один <p>тег навколо тексту, який ви хочете бачити в режимі читання, і щонайменше 516 символів у 7 словах усередині тексту.

наприклад, це запустить ReaderView:

<body>
<p>
 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789
 123456789 123456
</p>
</body>

Дивіться мій приклад на https://stackoverflow.com/a/30750212/1069083


Дякую за інформацію, у мене виникла сторінка, яка має декілька <p>тегів, але кожен тег під мінімальною кількістю символів, хоча 3 теги складають до 1455 символів. Але приємно знати номери специфікацій, над якими мені потрібно попрацювати, щоб зробити Reader View можливим на сторінці. Я також зауважую, що зображення у <figure>тегах із зовнішніх <p>тегів зберігаються у режимі Reader View. Вітаємо вас за допомогу
Мартін

Також було б цікаво, як спрацьовує хром-рідер на Android?
rubo77

36

Читання через код GitHub, вранці, процес є те , що сторінка елементи перераховані в порядку правдоподібності - з <section>, <p>, <div>, <article>у верхній частині списку (тобто , швидше за все).

Потім кожному з цих "вузлів" присвоюється оцінка на основі таких речей, як підрахунок коми та назви класів, що застосовуються до вузла. Це дещо багатогранний процес, коли оцінки додаються для фрагментів тексту, але також оцінки, здається, зменшуються для недійсних частин або синтаксису. Бали в підрозділах "вузла" відображаються в оцінці вузла в цілому. тобто батьківський елемент містить оцінки всіх нижчих елементів, я думаю.

Це значення оцінки вирішує, чи можна HTML-сторінку "переглядати сторінку" у Firefox.

Мені не зовсім зрозуміло, чи значення оцінки встановлюється Firefox або функцією читабельності.

Javascript насправді не є моєю сильною стороною, і я думаю, що хтось інший повинен перевірити посилання, надане Річардом ( https://github.com/mozilla/readability ), і перевірити, чи зможуть вони дати більш ґрунтовну відповідь.

Те, що я не бачив, але очікував побачити, - це оцінка на основі кількості текстового вмісту в <p>або <div>(або інших) відповідних тегах.

Будь-які покращення щодо цього питання чи відповіді, будь ласка, поділіться !!

РЕДАКТУВАТИ: Зображення <div>або <figure>теги (HTML5) в <p>елементі, здається, зберігаються в режимі читання, коли вміст тексту сторінки є дійсним.


1
Цікаво, чи використовує Safari Apple ті самі критерії, чи інший.
Михайло Т.

29

Я перейшов за посиланням Мартіна на сховище GitHub Readability.js і подивився вихідний код. Ось, що я з цього роблю.

Алгоритм працює з тегами абзаців. Перш за все, він намагається ідентифікувати частини сторінки, які точно не є вмістом, як форми тощо, і видаляє їх. Потім він переглядає вузли абзаців на сторінці та призначає оцінку на основі насиченості вмісту: він дає їм бали за такі речі, як кількість коми, довжина змісту тощо. Зверніть увагу, що абзац, що має менше 25 символів, негайно відкидається.

Потім результати оцінюють дерево DOM: кожен абзац додасть частину оцінки до всіх батьківських вузлів - прямий батько отримує повний бал до загальної суми, дідусь і бабуся лише половину, прадідусь третій і так далі на. Це дозволяє алгоритму визначати елементи вищого рівня, які, ймовірно, будуть основним розділом змісту.

Хоча це лише алгоритм Firefox, я думаю, якщо він добре працює для Firefox, він буде добре працювати і для інших браузерів.

Щоб ці алгоритми Reader View працювали на вашому веб-сайті, ви хочете, щоб вони правильно визначали важкі за вмістом розділи вашої сторінки. Це означає, що ви хочете, щоб більш важкі вузли на вашій сторінці отримували високі бали в алгоритмі.

Отже, ось кілька основних правил для покращення якості сторінки в очах цих алгоритмів:

  1. Використовуйте теги абзаців у своєму вмісті! Багато людей, як правило, не помічають їх на користь <br />тегів. Хоча це може виглядати схоже, багато алгоритмів, пов’язаних із вмістом (і не лише Reader View), значною мірою покладаються на них.
  2. Використання HTML5 семантичні елементи в розмітці, як <article>, <nav>, <section>, <aside>. Незважаючи на те, що це не єдиний критерій (як ви вже зазначали у запитанні), вони дуже корисні для комп'ютерів, які читають вашу сторінку (а не лише Reader View), щоб розрізняти різні розділи вашого вмісту. Readability.js використовує їх, щоб вгадати, які вузли, ймовірно, чи навряд чи містять важливий вміст.
  3. Оберніть свій основний вміст в одному контейнері, як елемент <article>або <div>. Це отримає бали від усіх тегів абзаців у ньому та буде визначено як основний розділ змісту.
  4. Тримайте дерево DOM дрібним у місцях, щільних вмістом. Якщо у вас багато елементів, що розбивають ваш вміст, ви лише ускладнюєте життя алгоритму: не буде жодного елемента, який би виділявся як батьківський для багатьох абзаців, важких за вмістом, а багатьох окремих з низькими балами.

2
Я спочатку писав статтю на своєму власному сайті про це, думав, що буду робити тут, а не просто підключати її.
Шон Боун,

1
Дякую за вашу відповідь. Чи не могли б ви додати дату (і посилання?), Коли ви писали це на своєму сайті, оскільки деталі, які ви тут розмістили, набагато складніші, ніж у rubo77 чи мої відповіді, тому я міг би очікувати, що алгоритм ускладнюється з кожним випуск Firefox - -.
Мартін

2
@Martin Це було написано в листопаді 2016 року - ось посилання: weblog.zumguy.com/read.php?tid=56
Шон Боун

8
Цікаво, що це відповідь, яка з’являється, коли я активую Reader View у своєму Firefox.
Кріс Якес

1
Примітка - стаття зараз знаходиться за
Шон Боун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.