Paywall
Приложение Chrome для управления ими всеми (Paywalls): часть 1
Вы всегда можете заплатить
Они говорили нам, что Интернет сделает нас свободными, что у нас будут знания, доступные нашему браузеру, безграничные возможности и все такое ... пока вы не достигнете (платной) стены:
Когда вы найдете это сообщение, у вас будет 2 варианта: вы платите членский взнос или можете использовать все свои знания, чтобы обойти это сообщение ¹… Пойдем по этому пути.
Существуют различные методы контроля платного доступа:
- По cookie (сегодня мы остановимся на этом)
- Путем перенаправления на другой сайт
- Скрывая контент с помощью JavaScript
Paywall через cookie
Medium использует файлы cookie для отслеживания нас, поэтому первым вариантом будет удаление файла cookie, который запускает этот платный доступ (кстати, поле sid в среднем файле cookie). Проблема в том, что тогда мне придется снова войти в систему, потому что, возможно, после прочтения я хочу добавить его в закладки, чтобы подписаться на автора (моя проблема связана с платным доступом, а не с контентом).
Но зачем беспокоиться, просто откройте статью в приватном режиме / режиме инкогнито и вуаля, никакого платного доступа.
Так как же добиться этого с меньшим трением? Допустим, мы создаем расширение Chrome, которое может определять, что нас остановил платный доступ, и автоматически открывать сайт в частном режиме. Довольно просто, не так ли?
Если вам нужно краткое руководство о том, как сделать расширение по умолчанию, см. Это руководство Google, я сосредоточусь на обходе платного доступа, загрузите приложение-шаблон и давайте начнем с этого.
Расширение
Наше приложение состоит в основном из:
- manifest.json содержит разрешения и объявляет другие файлы
- background.js для сообщения о расширении.
- hidden.js обнаруживает предупреждение о платном доступе и запускает частное окно.
- display.js мы будем использовать после этого в этой серии
Давайте погрузимся в манифест:
{ "name": "Gandalf", "version": "1.0", "description": "You shall not redirect", "manifest_version": 2, "content_security_policy": "script-src 'self' https://ajax.googleapis.com; object-src 'self'", "background": { "scripts": ["app/background.js"] <---- 1 }, "permissions": [ <---- 2 "webRequest", "webRequestBlocking", "tabs", "<all_urls>" ], "browser_action": { <---- 3 "default_title": "You shall not pass", "default_popup": "popup.html" }, "icons": { "16": "logo-small.png", "48": "logo-small.png", "128": "logo-small.png" }, "content_scripts": [ { "matches": ["*://*.uy/*"], "js": ["app/display.js"] }, { "matches": ["<all_urls>"], "js": ["app/hidden.js"] <---- 4 } ] }
- Ссылка на скрипт, содержащий логику расширения, добавление слушателей и определение некоторых констант.
- Расширению требуются некоторые разрешения, webRequest и webRequestBlocking для блокировки запроса (для следующей главы), вкладки для создания нового окна или вкладки. ‹All_urls› позволяет нам работать на всех веб-сайтах, вы можете изменить это, если вам нужны только определенные сайты.
- Просто название для нашего расширения, а popup.html - это то, что мы отображаем, когда кто-то щелкает значок расширения.
- Скрипты контента могут изменять контент сайта, этот применяется ко всем URL-адресам и вызывает hidden.js.
Итак, мы определили, что для всех URL-адресов будет выполняться hidden.js. Этот сценарий может получить доступ к основной части сайта, проверить наличие платного доступа и отправить сообщение (внутренний обмен сообщениями - это способ взаимодействия наших сценариев содержимого с расширением).
Для среднего мы можем использовать идентификатор paywall-background-color, чтобы проверить, нужно ли нам открывать в режиме инкогнито; теперь пора проверить фоновый скрипт:
Теперь, когда у нас есть готовое расширение, мы можем загрузить его в браузер и начать читать без остановки.
Следующими в серии мы попробуем обыграть платный доступ с редиректом.
Ресурсы
[1] Все, что делает расширение, - это устраняет некоторые затруднения с пользователем (который всегда может скопировать ссылку, войти в приватный режим и вставить ее), ни в коем случае мы не взламываем или изменяем поведение среды.