Firefox extension not working

2020-03-24 08:43发布

I've created a Firefox extension but I can't use it (nothing happens). Does someone know why ?

The module hierarchy

my_firefox_extension

  • chrome.manifest
  • install.rdf
  • chrome/
    • content/
      • locale.html
      • overlay.js
      • sample.xul

The code

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条回答
萌系小妹纸
2楼-- · 2020-03-24 09:18

The files in firefox could be corrected .

Try the following

Exit Firefox completely, then open your Firefox profile folder and delete or rename these files:

extensions.ini extensions.cache extensions.rdf

Starting in Firefox 4, also delete or rename:

extensions.sqlite extensions.sqlite-journal (if found)

Note: Although the above files can be deleted, renaming them (e.g., "extensionsOLD.ini", "extensionsOLD.cache", etc.) is generally considered a safer option. This achieves the same result, but allows the user to retrieve any possibly required information from them later on.

Then try to restart the browser and install them

Else there is another method which may work (but dont know why/how they work)

Enable third party cookies - go to Tools -> Options -> Privacy and check the Accept third-party cookies box.

查看更多
三岁会撩人
3楼-- · 2020-03-24 09:25

You missed one parameter which is probably causing the errors:

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
);
查看更多
The star\"
4楼-- · 2020-03-24 09:32

Does you extension work when using it in a live development environment, as opposed to having issues with the xpi installer?

With Firefox closed, create a “pointer” file with the same name as your extension’s Description:ID (as found in your install.rdf) in profile folder/extensions/ and edit it so that it contains the path to your extension’s folder (the root containing containing install.rdf and chrome.manifest files).

E.g. helloworld’s ID is helloworld@mozilla.doslash.org and we would like to register it in X:\Dev\helloworld\ (i.e. there is X:\Dev\helloworld\install.rdf file etc.). Just put a single line into the file at this path: profile folder/extensions/helloworld@mozilla.doslash.org

X:\Dev\helloworld\ - note trailing slash and no CR; this must be a SINGLE LINE

(Re)Start Firefox, and check that your extension is installed.

This will help you make sure that the extension works, before you start tackling installation issues.

查看更多
迷人小祖宗
5楼-- · 2020-03-24 09:35

(Just guessing, no testing involved)

NS_ERROR_FILE_TARGET_DOES_NOT_EXIST might be caused by incorrect script file reference in sample.xul

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

src attribute is missing a colon after "chrome". It should be

src="chrome://firefox_extension/content/overlay.js"
查看更多
登录 后发表回答