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
- content/
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>
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.
You missed one parameter which is probably causing the errors:
Does you extension work when using it in a live development environment, as opposed to having issues with the xpi installer?
This will help you make sure that the extension works, before you start tackling installation issues.
(Just guessing, no testing involved)
NS_ERROR_FILE_TARGET_DOES_NOT_EXIST
might be caused by incorrect script file reference in sample.xulsrc
attribute is missing a colon after "chrome". It should be