我已经创建了一个Firefox扩展但我无法使用它(没有任何反应)。 有人知道为什么吗?
模块层次结构
my_firefox_extension
代码
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>
答案 0 :(得分:6)
您错过了一个可能导致错误的参数:
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
);
答案 1 :(得分:0)
(只是猜测,不涉及测试)
NS_ERROR_FILE_TARGET_DOES_NOT_EXIST
可能是由sample.xul
<script type="application/x-javascript" src="chrome//firefox_extension/content/overlay.js"/>
src
属性在“chrome”后缺少冒号。它应该是
src="chrome://firefox_extension/content/overlay.js"
答案 2 :(得分:0)
可以更正firefox中的文件。
尝试以下
完全退出Firefox,然后打开Firefox配置文件夹并删除或重命名这些文件:
extensions.ini文件 extensions.cache extensions.rdf
从Firefox 4开始,也删除或重命名:
extensions.sqlite extensions.sqlite-journal(如果找到)
注意:虽然可以删除上述文件,但重命名它们(例如“extensionsOLD.ini”,“extensionsOLD.cache”等)通常被认为是更安全的选择。这实现了相同的结果,但允许用户稍后从中检索任何可能需要的信息。
然后尝试重新启动浏览器并安装它们
另外还有另一种可行的方法(但不知道为什么/如何工作)
启用第三方Cookie - 转到工具 - &gt;选项 - &gt;隐私并选中接受第三方Cookie框。
答案 3 :(得分:0)
在live development environment中使用它时是否可以扩展工作,而不是出现xpi安装程序问题?
关闭Firefox后,创建一个 与“同名”的“指针”文件 您的扩展程序的描述:ID(作为 在配置文件中的install.rdf)中找到 文件夹/扩展名/并对其进行编辑 它包含你的路径 extension的文件夹(root 包含install.rdf和 chrome.manifest文件)。
E.g。 helloworld的ID是 helloworld@mozilla.doslash.org和我们 想要注册 X:\ Dev \ helloworld \(即有 X:\ Dev \ helloworld \ install.rdf文件 等等。)。只需将一行放入 此路径中的文件:个人资料 folder/extensions/helloworld@mozilla.doslash.org
X:\ Dev \ helloworld \ - 记录尾随 斜线,没有CR;这必须是单行
(重新)启动Firefox,检查一下你的 已安装扩展程序。
这可以帮助您在开始解决安装问题之前确保扩展程序正常工作。