Кнопки не отображаются в уведомлениях Firefox WebExtension

Я работаю над Firefox WebExtension, в котором пытаюсь отобразить уведомление с помощью кнопки. У меня это работает в Chrome. Согласно документам, это поддерживается в Fire Fox. Кнопки указаны как необязательные в NotificationOptions.

chrome.notifications.create(notificaitonId, {
        type: "basic",
        iconUrl: chrome.extension.getURL("images/unknown.svg"),
       title: "Blah",
       message: "A Message",
       buttons: [{title: "Get More Details"}]
});

Когда я запускаю этот код, я вижу уведомление. Но я не вижу кнопки. Я что-то упускаю? Он действительно не поддерживается? Единственный пример для уведомлений не использует кнопки, так что это бесполезно.


person David Ward    schedule 16.03.2016    source источник
comment
В какой версии Firefox вы тестируете? Если еще нет, проводите ли вы тестирование в Developer Edition? Если вы там не работаете, протестировали ли вы в Nightly? Firefox WebExtensions — это новый API, который в настоящее время находится в стадии разработки. Поддерживаемые изменения от одной версии Firefox к другой. Возможно, вы уже тестируете их, но, по крайней мере, для меня попытки изучить это (например, в исходном коде FF или создать расширение для тестирования) без предварительной проверки вышеуказанного не оправданы.   -  person Makyen♦    schedule 17.03.2016
comment
Я использую Developer Edition 47.0a2 (2016-03-16). Я не тестировал в Nightly. Я сделаю это дальше и предоставлю обновление.   -  person David Ward    schedule 17.03.2016
comment
Я только что попробовал это в Nightly с тем же результатом.   -  person David Ward    schedule 17.03.2016
comment
Здесь я изменил пример кликов по ссылкам уведомлений, чтобы также показать кнопку. drive.google.com/   -  person David Ward    schedule 17.03.2016
comment
@Makyen, у тебя была возможность проверить себя? Я пропустил что-то очевидное здесь?   -  person David Ward    schedule 18.03.2016
comment
К сожалению, да. Мы оба упустили что-то очевидное. Я сейчас напишу подробный ответ, но суть в том, что кнопки еще не реализованы.   -  person Makyen♦    schedule 18.03.2016
comment
Хорошо, спасибо за быстрое обновление. Буду ждать более подробного.   -  person David Ward    schedule 18.03.2016


Ответы (1)


К сожалению, по состоянию на 18 марта 2016 г. кнопки не реализованы для уведомлений WebExtension.

В документации NotificationOptions на MDN указано [акцент/ мое форматирование]:

Первые четыре свойства — type, iconUrl, title, message — являются обязательными в notifications.create() и необязательно в notifications.update(). В настоящее время Firefox поддерживает только эти четыре свойства.

и в разделе Совместимость браузера:

Firefox поддерживает только: type, iconUrl, title, message.

Важными частями этого («Firefox в настоящее время поддерживает только эти четыре свойства», а Firefox поддерживает только: type, iconUrl, title, message.) были добавлено в документацию 07 марта 2016 г.. Таким образом, если бы вы посмотрели документацию до этой даты, не было бы указаний на то, что buttons еще не реализовано.

Кроме того, исходный код имеет комментарий:

// ИСПРАВЛЕНИЕ: многие параметры по-прежнему не поддерживаются, особенно
// кнопки.

Вы также можете найти исходный код, который в настоящее время используется для этого в вашем браузере по адресу: chrome://extensions/content/ext-notifications.js

Решение: реализовать buttons самостоятельно:

В WebExtensions:
может реализовать кнопки самостоятельно из WebExtensions. Однако я недостаточно знаком с WebExtensions, чтобы сказать, возможно это или нет. Если это так, вы, вероятно, захотите взглянуть на исходный код, реализующий уведомления и кнопки уведомлений для других типов надстроек Firefox.

В целом для Firefox:
Если бы мне это было нужно, я бы, вероятно, решил реализовать buttons и любые другие параметры, которые мне нужны, для всего Firefox и отправить код на Mozilla для просмотра и включения в Firefox. Я знаю, это может звучать так, как будто это большое дело и заноза в тылу, но на самом деле это не должно быть так сложно.

Если вы хотите поработать над ним, никаких специальных настроек не требуется. Код JavaScript, реализующий уведомления для WebExtensions, представляет собой файл ext-notifications.js, который содержится в каталоге chrome\toolkit\content\extensions внутри omni. ja (просто файл .zip с измененным расширением на .ja), который находится в каталоге установки Firefox. Обратите внимание, что на самом деле в иерархии каталогов установки есть 3 разных файла omni.ja. Тот, который вам нужен, находится в корне иерархии установки, а не в подкаталогах browser или webapprt.

Работать над ним будет так же просто, как извлечь этот файл, изменить его, создать обновленный файл omni.ja и поместить обновленный файл omni.ja в каталог выпуска. Некоторое время я делал это регулярно при каждом выпуске Firefox, потому что мне нужен был более длинный список файлов MRU для закладок. В конце концов я сломался и просто сделал оверлейное расширение, Изменить длину списка последних папок в закладках, чтобы заменить файл, в который я вносил изменения. Если вы хотите, вы можете сделать то же самое, чтобы реализовать изменения, необходимые для поддержки кнопок. Это, конечно, приведет к тому, что ваше текущее расширение будет зависеть от другого установленного до тех пор, пока код не будет интегрирован в Firefox. Но это приведет к тому, что у вас будет функциональность, которую вы желаете сейчас для своей разработки, и функциональность попадет в Firefox, по крайней мере, несколько быстрее, чем ожидание, пока кто-то другой в Mozilla ее реализует. Подобное оверлейное расширение просто берет install.rdf< /a>, двухстрочный chrome.manifest и обновленный файл ext-notifications.js, который вы хотите переопределить/заменить поверх текущего.

person Makyen♦    schedule 18.03.2016
comment
Открытая проблема с добавлением поддержки кнопок: bugzilla.mozilla.org/show_bug.cgi?id=1190681 - person Alexander O'Mara; 07.05.2017
comment
К сожалению, MDN очень расплывчато относится к этому вопросу. В нем говорится, что Firefox поддерживает только: type, iconUrl, title, message. но со ссылкой на FF45, что обычно означает только FF45. Из документации неясно, относится ли это только к FF45 или нет. - person erosman; 03.06.2017
comment
@erosman, я полагаю, вы имеете в виду FF45 в Совместимость браузера. Если это так, вы неправильно интерпретируете этот раздел. Когда версия указана в любом разделе совместимости браузеров на MDN, это означает первую версию, в которой функциональность существовала/работала, и она работает во всех более поздних версиях, если только явно не указано что-то другое (например, диапазон версий). 1. Поддерживаются только «type», «iconUrl», «title» и «message». (продолжение) - person Makyen♦; 03.06.2017
comment
указывает, что поддерживается только подмножество функций. Я согласен, что страница MDN, если бы она предназначалась только для охвата функциональности Firefox, могла бы быть намного более ясной, поскольку поддерживается только ограниченное подмножество. Mozilla решила, что документы WebExtension будут запутанной мешаниной реализаций. В частности, он будет документировать интерфейс Promise (browser.), описывая вещи, которые доступны только в интерфейсе обратного вызова (chrome.) на платформах, отличных от Firefox. Я выступал за то, чтобы все было менее запутанным, но не получил согласия (за исключением короткого периода в конце 2016 года). - person Makyen♦; 03.06.2017
comment
@Makyen...да..сначала я читал,что в FF45 реализованы только те опции,которые правильные. Но затем перечислено множество других опций, и нет текста о том, что они не поддерживаются. Поэтому можно предположить, что FF45 начинался с этих опций, но потом были добавлены остальные. Можно было бы и попонятнее :) - person erosman; 04.06.2017
comment
@erosman, Да, это могло бы быть яснее. Однако это согласуется с тем, как MDN обычно заявляет о поддержке браузера. Если в более поздней версии есть изменения (например, поддерживается больше вещей), в списке будет другая версия, возможно, с другим примечанием, указывающим, какие ограничения существовали в этой версии и более поздних версиях. Может быть несколько записей версии с примечанием для каждой. Обычно это согласуется с аналогичными списками в других подобных местах, но настоящего стандарта нет. - person Makyen♦; 04.06.2017
comment
Частично проблема заключается в том, что документы WebExtension представляют собой переход от документирования других типов надстроек Firefox, специфичных для Firefox, к своего рода документированию (проблема browser.*/chrome.*) части уже существующей реализации (Chrome) в способ, который предназначен для кросс-браузерной совместимости, но при этом сохраняет фокус Firefox. На самом деле он пытается документировать то, что реализовано/будет реализовано в нескольких браузерах. Однако то, что действительно поддерживается, — это движущаяся цель, во всех, кроме Chrome, который не поддерживает browser.* (хотя все стремятся к паритету с Chrome). - person Makyen♦; 04.06.2017