Расширение Firefox не работает - PullRequest
4 голосов
/ 04 мая 2011

Я создал расширение Firefox, но не могу его использовать (ничего не происходит). Кто-то знает почему?

Модуль иерархии

my_firefox_extension

  • chrome.manifest
  • install.rdf
  • хром /
    • содержание /
      • locale.html
      • overlay.js
      • sample.xul

код

chrome.manifest

content   firefox_extension chrome/content/

overlay chrome://browser/content/browser.xul  chrome://firefox_extension/content/sample.xul

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>displaypages@bruno.com</em:id>
    <em:name>Display the page locale</em:name>
    <em:description>Welcome to this extension that displays the page locale when a user opens a new tab or windows</em:description>
    <em:version>0.1</em:version>
    <em:creator>Bruno Da Silva</em:creator>
    <em:homepageURL>https://www.example.com</em:homepageURL>
    <em:type>2</em:type>

    <!-- Mozilla Firefox -->
    <em:targetApplication>
    <Description>
       <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
       <em:minVersion>3.0</em:minVersion>
       <em:maxVersion>4.0.*</em:maxVersion>
    </Description>
       </em:targetApplication>
  </Description>
</RDF>

sample.xul

<?xml version="1.0"?>

<overlay id="firefox_extension-browser-overlay"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <script type="application/x-javascript" src="chrome://firefox_extension/content/overlay.js"/>

</overlay>

overlay.js

function Read(file)
{
     var ioService=Components.classes["@mozilla.org/network/io-service;1"]
                             .getService(Components.interfaces.nsIIOService);
     var scriptableStream=Components
         .classes["@mozilla.org/scriptableinputstream;1"]
         .getService(Components.interfaces.nsIScriptableInputStream);

     var channel=ioService.newChannel(file,null,null);
     var input=channel.open();
     scriptableStream.init(input);
     var str=scriptableStream.read(input.available());
     scriptableStream.close();
     input.close();
     return str;
 }

gBrowser.addEventListener("DOMContentLoaded", function(e) {
    var documentElement = e.originalTarget.defaultView.document;
    var div = documentElement.createElement("div");
    div.innerHTML = Read("chrome://firefox_extension/content/locale.html");
    documentElement.body.appendChild(div);
});

locale.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Page displayed when a user opens a new tab or window</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   </head>
   <body>
         <p>Some text<p>
   </body>
</html>

Ответы [ 4 ]

6 голосов
/ 04 мая 2011

Вы пропустили один параметр, который, вероятно, вызывает ошибки:

gBrowser.addEventListener("DOMContentLoaded", function(e) {
    var documentElement = e.originalTarget.defaultView.document;
    var div = documentElement.createElement("div");
    div.innerHTML = Read("chrome://firefox_extension/content/locale.html");
    documentElement.body.appendChild(div);
},

false // missing parameter on addEventListener
      // add this and it might work
);
0 голосов
/ 04 мая 2011

Работает ли расширение при использовании его в живой среде разработки , в отличие от проблем с установщиком xpi?

При закрытом Firefox создайте «указатель»файл с тем же именем, что и у вашего расширения. Описание: ID (найденный в вашем install.rdf) в папке профиля / extensions / и отредактируйте его так, чтобы он содержал путь к папке вашего расширения (корень, содержащий install.rdf и chrome.файлы манифеста).

Например, идентификатор helloworld - helloworld@mozilla.doslash.org, и мы хотели бы зарегистрировать его в X: \ Dev \ helloworld \ (т. е. существует X: \ Dev \ helloworld \ install.rdfфайл и т. д.).Просто поместите одну строку в файл по этому пути: папка профиля/extensions/helloworld@mozilla.doslash.org

X: \ Dev \ helloworld \ - обратите внимание на конечную косую черту и без CR;это должна быть ОДНА ЛИНИЯ

(Пере) Запустите Firefox и убедитесь, что ваше расширение установлено.

Это поможет вам убедиться, что расширение работает, прежде чем приступить к работевопросы установки.

0 голосов
/ 04 мая 2011

Файлы в Firefox могут быть исправлены.

Попробуйте следующее

Полностью выйдите из Firefox, затем откройте папку профиля Firefox и удалите или переименуйте эти файлы:

extensions.ini extensions.cache extensions.rdf

Начиная с Firefox 4, также удаляйте или переименовывайте:

extensions.sqlite extensions.sqlite-journal (если найден)

Примечание. Хотя указанные выше файлы можно удалить, их переименование (например, «extensionsOLD.ini», «extensionsOLD.cache» и т. Д.) Обычно считается более безопасным вариантом. Это дает тот же результат, но позволяет пользователю впоследствии получать любую необходимую информацию из них.

Затем попробуйте перезапустить браузер и установить их

Еще есть другой метод, который может работать (но не знаю, почему / как они работают)

Включить сторонние файлы cookie - перейдите в Инструменты -> Параметры -> Конфиденциальность и установите флажок Принимать сторонние файлы cookie.

0 голосов
/ 04 мая 2011

(просто предположение, тестирование не требуется)

NS_ERROR_FILE_TARGET_DOES_NOT_EXIST может быть вызвано неправильной ссылкой на файл сценария в sample.xul

<script type="application/x-javascript" src="chrome//firefox_extension/content/overlay.js"/>

src. Отсутствует двоеточие после"хром".Это должно быть

src="chrome://firefox_extension/content/overlay.js"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...