Уведомления отличные. Когда приложение хочет привлечь внимание пользователя, обычно когда был выполнен (долгий) процесс и, возможно, пользователь перешел на другую вкладку или даже в другое приложение, уведомление позволит пользователю узнать о процессе и, возможно, сможет вернуть их. в приложение, чтобы они могли продолжить свое взаимодействие.
Расширения Google Chrome тоже хороши. Расширение помогает разработчику расширить функциональность браузера / веб-сайта, запустив дополнительный код в контексте определенных веб-сайтов или в целом.
Существует множество руководств о том, как писать расширения для Chrome, и официальный веб-сайт также является хорошим ресурсом и содержит объяснения и примеры, поэтому он не будет рассматриваться в этой публикации. В сообщении предполагается, что у вас уже есть некоторые базовые знания о разработке расширения Chrome, но, тем не менее, вы ссылаетесь на соответствующие ресурсы в нужных местах.
Что мы собираемся делать?
Давайте возьмем очень простое расширение, которое добавляет кнопку на веб-страницу. При нажатии на эту кнопку браузер отобразит уведомление, как на картинке в верхней части сообщения.
Давай сделаем это
Во-первых, чтобы мы могли оставить это позади, давайте создадим файл манифеста. Что-то вроде этого:
{ "name": "Greeter Robot", "version": "1.0", "content_scripts": [ { "matches": ["https://*/*", "https://*/*"], "js": [ "js/app.js" ] } ], "browser_action": { "default_icon": "icon.png" }, "manifest_version": 2 }
Шаг 1 - мы воспользуемся скриптом содержимого (app.js), чтобы управлять DOM сайта и добавить <button />
const button = document.createElement('button'); button.textContent = 'Greet me!' document.body.insertAdjacentElement('afterbegin', button);
Теперь, если вы просмотрите, скажем, StackOverflow, вы увидите кнопку очень красиво
Шаг 2 - добавим click
обработчик, чтобы убедиться, что он работает
const button = document.createElement('button'); button.textContent = 'Greet me!' document.body.insertAdjacentElement('afterbegin', button); button.addEventListener('click', () => { console.log('Clicked'); });
И это делает
Покажем уведомление
Очевидный шаг - перейти в официальную документацию Уведомления. Там мы можем найти API
chrome.notifications.create(string notificationId, NotificationOptions options, function callback)
В нашем случае мы назовем этот код:
chrome.notifications.create('', { title: 'Just wanted to notify you', message: 'How great it is!', iconUrl: '/robot-face_1f916.png', type: 'basic' });
К сожалению, мы получаем ошибку
Uncaught TypeError: невозможно прочитать свойство create из undefined
Почему?
Этот метод API (среди прочего) не предназначен для вызова из сценария содержимого (помните?), А только из фонового сценария.
Скрипты содержимого могут получать доступ к API Chrome, используемым их родительским расширением, обмениваясь сообщениями с расширением.
Это также дает нам решение - использовать фоновый скрипт.
Поэтому вместо того, чтобы напрямую обращаться к API уведомлений из клиентского сценария, мы должны отправить сообщение фоновому сценарию с параметрами и создать уведомление оттуда.
Как это будет выглядеть?
Во-первых, нам нужно (создать и) зарегистрировать другой скрипт - фоновый скрипт в файле манифеста.
"background" : { "scripts" : ["js/background.js"], "persistent": false }
А теперь мы можем отправить этому сценарию сообщение, в котором хотим отобразить уведомление.
app.js (сценарий содержимого)
button.addEventListener('click', () => { chrome.runtime.sendMessage('', { type: 'notification', options: { title: 'Just wanted to notify you', message: 'How great it is!', iconUrl: '/icon.png', type: 'basic' } }); });
background.js (фоновый скрипт)
chrome.runtime.onMessage.addListener(data => { if (data.type === 'notification') { chrome.notifications.create('', data.options); } });
Теперь расширение будет отображать уведомление, как на картинке в верхней части сообщения.
Исходный код
Https://github.com/moshfeu/chrome-extension-notification-demo
Есть что сказать? Я буду рад 👂
https://twitter.com/moshfeu