Использование хрома.вкладки против браузера.вкладки для совместимости с браузером



Я портирую расширение Chrome в Firefox.



Согласно MDN существует браузер .tabs API, который должен поддерживаться chrome.



Однако browser не является объектом в Chrome stable.
В то же время chrome.tabs отлично работает в Firefox.



Безопасно ли заменять browser на chrome при чтении документов MDN?
По какой причине документы пишут browser? Есть ли планируемые изменения грядущих?

593   1  

1 ответ:

Примечание: за последние пару дней многие страницы MDN JavaScript API были изменены с использования chrome.* на использование browser.* и описание обещания, которое предоставляется интерфейсом browser.*. Эти изменения заставляют страницы вообще не упоминать использование API как chrome.*. Изменения вносятся тем же человеком в рамках проекта, с которым я обсуждал переход от browser.* к chrome.*. Я еще не знаю, что происходит. Я отправил ему электронное письмо с просьбой объяснить причину этого изменения. По состоянию на эту редакцию, 2016-11-02, слишком рано ожидать ответа от него.


Я не участвую в работе над API. Но я внес и внесу некоторые изменения в документацию API, в частности, в отношении WebExtensions chrome.* vs. browser.* (все страницы были изменены, чтобы показать chrome.* по состоянию на 2016-09-22). Я был вовлечен, потому что я также обнаружил, что большинство страниц API WebExtensions показывают browser.* путаницу. Я хотел знать, в чем разница между chrome.* и browser.*. Как только я узнал об этом, я захотел сделать это менее запутанным для других.

Вебэкстензии browser.* API возвращает обещание :

Объект browser.* реализует версию API, которая возвращает обещание , если вы не предоставляете функцию обратного вызова когда вы вызываете API. Смысл заключается в том, что фактическая функциональность одинакова как для chrome.*, так и для browser.*. Если вы предоставляете функцию обратного вызова API browser.*, она функционирует идентично chrome.* ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.

Безопасно ли заменять browser на chrome при чтении документов MDN?

Да, если только в документации конкретно не обсуждаются обещания. Единственное различие между ними состоит в том, что методы browser.* вернут обещание, если функция обратного вызова не будет предоставлена при вызове API.

Какова причина написания документов browser?

Я не уверен, почему документы изначально были написаны с browser.* таким образом видный. Я предполагаю, что либо это был выбор конфигурации, который был сделан при создании страниц, либо специфика разницы между chrome.* и browser.* изменилась в какой-то момент на ранней стадии реализации API WebExtensions.

Есть ли техническая причина, по которой chrome.* без обратного вызова не может вернуть обещание?

Единственная причина, которую я придумал до сих пор, заключается в том, что использование chrome.* для возврата обещаний сделало бы невозможным проверить наличие обязательная функция обратного вызова при выполнении проверки параметров в API. С пространством имен browser.* API может предположить, что вызывающий объект использует возвращенное обещание. Таким образом, с помощью browser.* обещание может быть возвращено, а не генерировать ошибку, когда обязательная функция обратного вызова не предусмотрена в вызове API. Эта причина, однако, является спекуляцией с моей стороны.

Изменение документации:

Я согласен, что наличие документации API в первую очередь показывает browser.* в синтаксисе раздел и в других местах на каждой странице API сбивает с толку (например, в примерах). Я обсуждал изменение этого через всю документацию API с человеком, главным образом ответственным за документацию WebExtensions в течение последних 3 недель. Он согласен, что его нужно изменить.

Есть планы внести изменения. Документация будет изменяться по меньшей мере в два этапа. Во-первых, нужно будет пройти через все страницы API WebExtensions и изменить раздел синтаксиса, чтобы сказать chrome.*. Обратите внимание на в конце раздела синтаксиса будет сказано, что " API также доступен как browser.* в версии , которая возвращает обещание."Кроме того, все использование browser.* на всей странице будет изменено на chrome.*, за исключением тех частей, которые специально показывают API, используемый в качестве возвращающего обещание.

В настоящее время ожидается, что страница будет выглядеть очень похоже на сигналы тревоги.clear () теперь делает. Я изменил эту страницу, чтобы показать, что я предполагал, что изменение будет, в том числе предложения от лица, ответственного за документацию WebExtensions. Синтаксический раздел alarms.clear() в настоящее время выглядит следующим образом:

сигнализация.clear () с новым форматированием

Первоначально (3 недели назад, 2016-08-25) я изменил страницы API с alarms.clear() через browserAction.enable() с первичным изменением перемещения контента из saying browser.* в chrome.*, когда мой доступ к внесению изменений на MDN был отключен из-за их автоматической фильтрации спама. Это приведет к обсуждению формата, который изменения будут происходить. Я сделал паузу, внося изменения в надежде, что начальные изменения можно будет сделать за один проход, как только будет выбран промежуточный формат для синтаксического блока. Из-за реальной жизни, с обеих сторон, обсуждение заняло больше времени, чем я ожидал.

Похоже, что обсуждение точного формата, который будет использоваться, расширится, чтобы включить список рассылки dev-mdc из-за того, что "правильный" формат для синтаксических полей не ясен в Mozilla документация по написанию метода API страница .

Тем не менее, я считаю, что могу двигаться вперед с изменением показа chrome.* вместо browser.*. Это, вероятно, приведет к тому, что страницы придется редактировать снова, чтобы получить формат для того, что в конечном итоге будет решено как официальное форматирование. Внесение изменений browser.* в chrome.* до завершения формата синтаксического блока, вероятно, приведет к более общей работе, но уменьшит путаницу при окончательной версии формата изменения обсуждаются. Хотя я должен вносить эти изменения постранично (есть API для внесения массовых изменений, но у меня нет доступа), я уже реализовал сценарий, который вносит большинство необходимых изменений. Таким образом, эти начальные не должны занимать слишком много времени.

Обновление:
Я изменил все страницы JavaScript API WebExtensions, чтобы показать chrome.* вместо browser.*. Возможно, Вам потребуется нажать Ctrl-F5 на каждой странице, чтобы увидеть изменения.

Дальнейшие изменения, более четкое предоставление документации по browser.*:
После внесения полных изменений в форматирование синтаксических блоков есть желание, чтобы позже были внесены дополнительные изменения, которые предоставляют больше примеров на основе каждого API-страницы различий между использованием chrome.* и browser.*. Это почти наверняка долгосрочный проект.

Comments

    Ничего не найдено.