Я работаю над расширением браузера/надстройкой. Мы работаем в Chrome, поэтому я пытаюсь заставить его работать в Firefox.Как я могу сделать надстройку addcript надстройки firefox и запустить скрипт перед другими скриптами страниц?
Я получил надстройку для загрузки в Firefox Developer Edition 49.0a2 (2016-07-25).
Мое расширение включает в себя набор content_script для run_at: document_start
, поэтому он может вставлять тег сценария перед запуском других скриптов страниц, чтобы он мог сделать объект глобально доступным для веб-сайтов.
Это, как показалось, отлично работает в Chrome, но в Firefox он оказался немного гоночным, с большей загрузкой других ресурсов страницы.
Есть ли стратегия загрузки сценария контента так, чтобы он мог вводить & загрузку скрипта перед запуском любых других скриптов страницы?
Когда я добавляю журналы, я могу изолировать то, что происходит довольно красиво. В этом примере контент-скрипт:
// inject in-page script
console.log('STEP 1, this always happens first')
var scriptTag = document.createElement('script')
scriptTag.src = chrome.extension.getURL('scripts/inpage.js')
scriptTag.onload = function() { this.parentNode.removeChild(this) }
var container = document.head || document.documentElement
// append as first child
container.insertBefore(scriptTag, container.children[0])
Теперь, если файл scripts/inpage.js
просто запускает журнал, как
console.log('STEP 2, this should always run second')
И я посещаю страницу со скриптом, как это:
console.log('Step 3, the page itself, should run last')
На практике шаги 2 и 3 выполняются в недетерминированном порядке.
Большое спасибо!
У меня есть Firefox-совместимая версия сценария в публичном хранилище на специальном отделение, если вы решитесь попробовать сам: https://github.com/MetaMask/metamask-plugin/tree/FirefoxCompatibility
Это строка, в которой я добавляю тег скрипта на текущую страницу. Когда я делаю это с помощью журналов, я вижу, что этот код запускается до скрипта страницы, но сам сценарий с инъекциями не всегда запускается до скриптов страниц. https://github.com/MetaMask/metamask-plugin/blob/FirefoxCompatibility/app/scripts/contentscript.js#L20 – DanF