Nano Hash - криптовалюты, майнинг, программирование

Обнаружение навигации в дополнениях FF

Я переношу расширение Chrome в FF, используя «FF Addon SDK». В файле фонового сценария (main.js) мне нужно использовать эквивалент FF...

chrome.webNavigation.onBeforeNavigate.addListener()

а также

chrome.tabs.onUpdated.addListener()

Я заметил, что require("sdk/tabs").on имеет только открытие, закрытие, завершение и т. д., но не имеет ничего общего с навигацией.

Я вижу несколько решений, которые используют Page-Mod или демонстрируют решение для старого XUL-способа разработки расширений FF. Я специально ищу решение FF Addon SDK (только).

Цените любые входные данные.

РЕДАКТИРОВАТЬ: мне удалось найти альтернативу chrome.tabs.onUpdated.addListener() с помощью Progress Listener. Судя по всему, в FF он называется onLocationChange. Все еще ищете альтернативу chrome.webNavigation.onBeforeNavigate.addListener()


Ответы:


1

к сожалению, нет подходящей замены для chrome.webNavigation.onBeforeNavigate.addListener(). Неделю назад оказался в такой же ситуации. Пытался использовать nsIWebProgressListener.onStateChange для STATE_START. Не работает, как ожидалось. лучше всего было бы: 1.) использовать событие onLocationChange, которое даст вам URI загружаемого местоположения. 2.) перехватить Httprequest. Отфильтруйте один для верхнего уровня и вызовите его onbeginnavigate.

Дайте мне знать, если вы найдете другие средства.

17.10.2015
  • Я также использую onLocationChange, но он работает намного медленнее, чем onBeforeNavigate в Chrome. Можете ли вы дать более подробную информацию или пример кода для перехвата HttpRequest. 17.10.2015
  • обратитесь к этой документации: developer.mozilla .org/en-US/Add-ons/Code_snippets/. Нет доступных дополнительных методов SDK. Вам нужно портировать этот пример, чтобы использовать js-xpcom 19.10.2015

  • 2

    Хорошо, мне удалось разобраться. Нам нужно использовать прослушиватель onStateChange. Чтобы имитировать onBeforeNavigation, нам нужно проверить не только STATE_START, но и STATE_IS_DOCUMENT.

    var progressListener = {
        QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener, Ci.nsISupportsWeakReference]),
    
        onLocationChange: function(aWebProgress, aRequest, aURI) {
            if (aRequest && aURI) {
                console.log('onLocationChange: ' + aURI.spec);
            }
        },
    
        onStateChange: function(aWebProgress, aRequest, aStateFlags, aStatus) {
            var status = Ci.nsIWebProgressListener;
    
            if(aStateFlags&status.STATE_START && aStateFlags&status.STATE_IS_DOCUMENT) {
                console.log('onStateChange: ' + aRequest.QueryInterface(Ci.nsIChannel).originalURI.spec);
            }
        }
    };
    
    24.10.2015

    3

    Вы можете прикрепить событие onBeforeUnload/onUnload из вашего фреймскрипта.

    24.10.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..