Моя надстройка, скомпилированная из скрипта Greasemonkey, который использует функции GM_, не работает в Firefox версии 31+

У меня есть надстройка Firefox, которая представляет собой расширение на основе оверлеев, работающее в версии Firefox до 31. Но оно не работает в версии 32 и выше. Обычно я использую инструмент компилятора Userscript для создания своего расширения. Я не вижу ничего (ошибки / выходы) в консоли от моего расширения.

Хотя, когда я запускаю свой скрипт, используя плагин Greasemonkey, он работает нормально. Проблема заключается в запуске расширения после сборки его в виде файла XPI.

Ниже моя структура расширения:

myextension
 |-->skin
    |-->classic
 |-->content
    |-->myscript.user.js
    |-->myscriptPrefman.js
    |-->myscriptScript-compiler.js
    |-->myscriptXmlhttprequester.js
    |-->script-compiler-overlay.xul
 |-->chrome
 |-->install.rdf
 |-->icon.png
 |-->chrome.manifest

Ниже приведены install.rdf содержимое файла:

<?xml version="1.0"?>
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
<Description about="urn:mozilla:install-manifest">
<em:id>{9ef9b86c-03da-4e10-9552-e97a6d258af5}</em:id>
<em:name>Sample Extension</em:name>
<em:version>2.6</em:version>
<em:description>A sample extension - Firefox</em:description>
<em:creator>Mozdev</em:creator>
<em:contributor>Greasemonkey Compiler by Anthony Lieuallen;</em:contributor>
<em:contributor>http://arantius.com/</em:contributor>
<em:homepageURL>www.example.com</em:homepageURL>
<em:targetApplication><Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>2.0</em:minVersion>
<em:maxVersion>35.*</em:maxVersion>
</Description>
</em:targetApplication>
</Description>
</RDF>

chrome.manifest содержание:

content myextension content/
overlay chrome://browser/content/browser.xul   chrome://myextension/content/script-compiler-overlay.xul
skin myextension classic/1.0 skin/classic/

Нужно ли что-либо менять в расширении или преобразовывать в расширение Bootstrap или использовать SDK для дополнений для создания файла XPI?

ОБНОВИТЬ:

Я воспользовался методом Add-on SDK, предложенным Владимиром, и создал файл установщика XPI. Но пользовательские скрипты не запускаются внутри страницы.
Код по-прежнему выполняется из дополнения Greasemonkey.

Это скрипт Greasemonkey, который отлично работает в Greasemonkey, но не когда он превращается в расширение ни с помощью компилятора, ни с помощью SDK.

Я следовал инструкциям по установке SDK надстройки на моем локальном компьютере. Я использовал cfx Команда для создания файла XPI. Я устанавливаю это в последнюю версию Firefox (ver.33.0.2) и захожу на openuserjs.org. Я ничего не вижу. Это почему?

1 ответ

Решение

Я скопировал код, просто используя Firefox Request Api для GM_XmlhttpRequest и локальное хранилище для локального хранения информации. И заставьте сценарий связываться с main.js, используя Message Passing, который является основой для Restartless Firefox Addon SDK Api.

var data = require("self").data;
var pageMod = require("page-mod");
pageMod.PageMod({
  include: "*.example.com", //mywebsite url
  contentScriptWhen: 'start',
  contentScriptFile: data.url("contentScript.js")
});

contentScriptFile - это место, где вы хотите написать свои пользовательские скрипты и обмениваться данными с main.js, используя сообщения о портах в последних API Firefox AddonSDK.

Я использовал Request API для получения информации с сервера вместо неподдерживаемого GM_xmlhttpRequest.

var Request = require("sdk/request").Request;
var userDetails = Request({
  url: "http://example.com/user/1",
  onComplete: function (response) {
    var res = response.json[0];
  }
});

И теперь расширение перезапускается и полностью переписывается с использованием API высокого и низкого уровня в документации Firefox. Надеюсь, что будущие изменения браузера будут использовать эти API и поддерживать расширение как более длительный период времени.

Другие вопросы по тегам