Использование хрома.вкладки против браузера.вкладки для совместимости с браузером
Я портирую расширение Chrome в Firefox.
Согласно MDN существует браузер .tabs API, который должен поддерживаться chrome.
Однако browser не является объектом в Chrome stable.
В то же время chrome.tabs отлично работает в Firefox.
Безопасно ли заменять browser на chrome при чтении документов MDN?
По какой причине документы пишут browser? Есть ли планируемые изменения грядущих?
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.*. Если вы предоставляете функцию обратного вызова APIbrowser.*, она функционирует идентичноchrome.*ПРИКЛАДНОЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС.Безопасно ли заменять
browserнаchromeпри чтении документов MDN?Да, если только в документации конкретно не обсуждаются обещания. Единственное различие между ними состоит в том, что методы
browser.*вернут обещание, если функция обратного вызова не будет предоставлена при вызове API.Какова причина написания документов
browser?Я не уверен, почему документы изначально были написаны с
browser.*таким образом видный. Я предполагаю, что либо это был выбор конфигурации, который был сделан при создании страниц, либо специфика разницы междуchrome.*иbrowser.*изменилась в какой-то момент на ранней стадии реализации API WebExtensions.Есть ли техническая причина, по которой
chrome.*без обратного вызова не может вернуть обещание?Единственная причина, которую я придумал до сих пор, заключается в том, что использование
chrome.*для возврата обещаний сделало бы невозможным проверить наличие обязательная функция обратного вызова при выполнении проверки параметров в API. С пространством именbrowser.*API может предположить, что вызывающий объект использует возвращенное обещание. Таким образом, с помощьюbrowser.*обещание может быть возвращено, а не генерировать ошибку, когда обязательная функция обратного вызова не предусмотрена в вызове API. Эта причина, однако, является спекуляцией с моей стороны.Изменение документации:
Я согласен, что наличие документации API в первую очередь показывает
Есть планы внести изменения. Документация будет изменяться по меньшей мере в два этапа. Во-первых, нужно будет пройти через все страницы API WebExtensions и изменить раздел синтаксиса, чтобы сказатьbrowser.*в синтаксисе раздел и в других местах на каждой странице API сбивает с толку (например, в примерах). Я обсуждал изменение этого через всю документацию API с человеком, главным образом ответственным за документацию WebExtensions в течение последних 3 недель. Он согласен, что его нужно изменить.chrome.*. Обратите внимание на в конце раздела синтаксиса будет сказано, что " API также доступен какbrowser.*в версии , которая возвращает обещание."Кроме того, все использованиеbrowser.*на всей странице будет изменено наchrome.*, за исключением тех частей, которые специально показывают API, используемый в качестве возвращающего обещание.В настоящее время ожидается, что страница будет выглядеть очень похоже на сигналы тревоги.clear () теперь делает. Я изменил эту страницу, чтобы показать, что я предполагал, что изменение будет, в том числе предложения от лица, ответственного за документацию WebExtensions. Синтаксический раздел
alarms.clear()в настоящее время выглядит следующим образом:Первоначально (3 недели назад, 2016-08-25) я изменил страницы API с
alarms.clear()черезbrowserAction.enable()с первичным изменением перемещения контента из sayingbrowser.*вchrome.*, когда мой доступ к внесению изменений на MDN был отключен из-за их автоматической фильтрации спама. Это приведет к обсуждению формата, который изменения будут происходить. Я сделал паузу, внося изменения в надежде, что начальные изменения можно будет сделать за один проход, как только будет выбран промежуточный формат для синтаксического блока. Из-за реальной жизни, с обеих сторон, обсуждение заняло больше времени, чем я ожидал.Похоже, что обсуждение точного формата, который будет использоваться, расширится, чтобы включить список рассылки dev-mdc из-за того, что "правильный" формат для синтаксических полей не ясен в Mozilla документация по написанию метода API страница .
Тем не менее, я считаю, что могу двигаться вперед с изменением показаchrome.*вместоbrowser.*. Это, вероятно, приведет к тому, что страницы придется редактировать снова, чтобы получить формат для того, что в конечном итоге будет решено как официальное форматирование. Внесение измененийbrowser.*вchrome.*до завершения формата синтаксического блока, вероятно, приведет к более общей работе, но уменьшит путаницу при окончательной версии формата изменения обсуждаются. Хотя я должен вносить эти изменения постранично (есть API для внесения массовых изменений, но у меня нет доступа), я уже реализовал сценарий, который вносит большинство необходимых изменений. Таким образом, эти начальные не должны занимать слишком много времени.Обновление:
Я изменил все страницы JavaScript API WebExtensions, чтобы показатьchrome.*вместоbrowser.*. Возможно, Вам потребуется нажать Ctrl-F5 на каждой странице, чтобы увидеть изменения.Дальнейшие изменения, более четкое предоставление документации по
browser.*:
После внесения полных изменений в форматирование синтаксических блоков есть желание, чтобы позже были внесены дополнительные изменения, которые предоставляют больше примеров на основе каждого API-страницы различий между использованиемchrome.*иbrowser.*. Это почти наверняка долгосрочный проект.

Comments