Кроссбраузерное расширение

Я пытаюсь написать расширение, используя TypeScript, которое работает во всех браузерах. Я нашел этот пакет: https://www.npmjs.com/package/web-ext-types, которые я использую и настроил в своем package.json.

В машинописном тексте я могу ввести браузер и увидеть всю информацию и т. Д., Но когда я запускаю его в Chrome, я получаю исключение:

Uncaught (in promise) ReferenceError: browser is not defined.

Мой код ниже:

browser.webNavigation.onHistoryStateUpdated.addListener((e) => {
    console.log("webNavigation onHistoryStateUpdated");
    console.log(e);
    // do something here
});

Я новичок в машинописи и расширениях браузера, если я перейду на Chrome, он будет работать нормально, но тогда не будет поддерживаться в IE/Firefox (может быть, в Firefox?). Я нашел эту статью: https://www.smashingmagazine.com/2017/04/browser-extension-edge-chrome-firefox-opera-brave-vivaldi/, в котором предлагается добавить это:

window.browser = (function () {
    return window.msBrowser ||
        window.browser ||
        window.chrome;
})();

Мой вопрос в том, должен ли я это делать или должны ли веб-расширения обрабатывать это? Также, когда я пытаюсь поместить это где-нибудь в TypeScript, я получаю сообщение об ошибке:

Браузер свойств не существует для окна типа. В настоящее время я также в том числе:

"@types/chrome": "~0.0.63",

Должен ли я удалить это, если я использую типы web-ext? Я также использую chrome.declarativeContent.onPageChanged, которого, похоже, нет в браузере.

Спасибо за любую помощь.


person user351711    schedule 14.07.2018    source источник
comment
Я не уверен, почему за это проголосовали, но буду признателен за любую помощь.   -  person user351711    schedule 14.07.2018
comment
Что делает расширение для браузера?   -  person Rainb    schedule 14.07.2018
comment
ну, дело в том, что браузер не определен, поэтому он не работает   -  person Rainb    schedule 14.07.2018
comment
Здравствуйте, спасибо за ответ. Я понимаю, что он не определен в хроме и, по-видимому, определяется как msBrowser в краю, хотя напрямую не пробовал, но читал как таковой. Я надеюсь, что единый фрагмент кода, работающий в Chrome, Firefox и Edge, будет написан на машинописном языке. Это возможно?   -  person user351711    schedule 14.07.2018


Ответы (1)


Я думаю, вы ищете chrome.history.onVisited.addListener, но это не так. точно так же, как в хроме, но функциональность похожа.

насколько я знаю, в хроме нет переменной «браузер», однако вы можете сделать какой-то полифилл, в принципе это может работать. Что-то вроде jQuery для расширений браузера.

person Rainb    schedule 14.07.2018
comment
Спасибо за ответ, я рассмотрю ваше предложение. Похоже, предлагается использовать хром, а не браузер и полифилл для края: docs.microsoft.com/en-us/microsoft-edge/extensions/guides/ - person user351711; 14.07.2018