Javascript 为什么我的简单Firefox扩展现在拒绝运行?

Javascript 为什么我的简单Firefox扩展现在拒绝运行?,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,问这样一个基本的问题让我很痛苦,但我已经束手无策了 处境 我在一台32位Windows7机器上工作,运行Firefox34.0.5 我在目录C:\Projects\CloudGem\plugin中有一个普通的Firefox扩展名文件结构如下: 除某些FF开发者插件外,所有其他插件都被禁用 所有文件都已确认为UTF-8编码 文件内容 cloudgem.js的两个实例的内容如下: window.addEventListener( "load", function()

问这样一个基本的问题让我很痛苦,但我已经束手无策了

处境
  • 我在一台32位Windows7机器上工作,运行Firefox34.0.5

  • 我在目录
    C:\Projects\CloudGem\plugin
    中有一个普通的Firefox扩展名
    文件结构如下:

  • 除某些FF开发者插件外,所有其他插件都被禁用

  • 所有文件都已确认为UTF-8编码

文件内容
cloudgem.js
的两个实例的内容如下:

window.addEventListener( "load", function() {
    setInterval( function() {
        console.log( "Cloudgem service started (2)." );
    }, 2000 );
}, false );

console.log( "Cloudgem service started (1)." );
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay>

<overlay id="cgem-scriptmount" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/x-javascript" src="cloudgem.js" />
</overlay>
# Content definitions.

content      cloudgem      chrome/content/


# Overlays.

overlay chrome://browser/content/browser.xul chrome://cloudgem/content/cloudgem.xul
<?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>cloudgem@cloudgem.net</em:id>
        <em:version>1.0</em:version>
        <em:type>2</em:type>

        <!-- Target application this extension can install into, with minimum and maximum supported versions. -->
        <em:targetApplication>
            <Description>
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                <em:minVersion>1.5</em:minVersion>
                <em:maxVersion>34.0.*</em:maxVersion>
            </Description>
        </em:targetApplication>

        <!-- Front end metadata. -->
        <em:name>CloudGem</em:name>
        <em:description>A description of GloudGem.</em:description>
        <em:creator>Me</em:creator>
        <em:homepageURL>http://cloudgem.net/</em:homepageURL>
    </Description>
</RDF>
C:\Projects\CloudGem\plugin\
cloudgem.xul
的内容包括:

window.addEventListener( "load", function() {
    setInterval( function() {
        console.log( "Cloudgem service started (2)." );
    }, 2000 );
}, false );

console.log( "Cloudgem service started (1)." );
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay>

<overlay id="cgem-scriptmount" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/x-javascript" src="cloudgem.js" />
</overlay>
# Content definitions.

content      cloudgem      chrome/content/


# Overlays.

overlay chrome://browser/content/browser.xul chrome://cloudgem/content/cloudgem.xul
<?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>cloudgem@cloudgem.net</em:id>
        <em:version>1.0</em:version>
        <em:type>2</em:type>

        <!-- Target application this extension can install into, with minimum and maximum supported versions. -->
        <em:targetApplication>
            <Description>
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                <em:minVersion>1.5</em:minVersion>
                <em:maxVersion>34.0.*</em:maxVersion>
            </Description>
        </em:targetApplication>

        <!-- Front end metadata. -->
        <em:name>CloudGem</em:name>
        <em:description>A description of GloudGem.</em:description>
        <em:creator>Me</em:creator>
        <em:homepageURL>http://cloudgem.net/</em:homepageURL>
    </Description>
</RDF>
C:\Projects\CloudGem\plugin\
install.rdf
的内容包括:

window.addEventListener( "load", function() {
    setInterval( function() {
        console.log( "Cloudgem service started (2)." );
    }, 2000 );
}, false );

console.log( "Cloudgem service started (1)." );
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE overlay>

<overlay id="cgem-scriptmount" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script type="application/x-javascript" src="cloudgem.js" />
</overlay>
# Content definitions.

content      cloudgem      chrome/content/


# Overlays.

overlay chrome://browser/content/browser.xul chrome://cloudgem/content/cloudgem.xul
<?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>cloudgem@cloudgem.net</em:id>
        <em:version>1.0</em:version>
        <em:type>2</em:type>

        <!-- Target application this extension can install into, with minimum and maximum supported versions. -->
        <em:targetApplication>
            <Description>
                <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
                <em:minVersion>1.5</em:minVersion>
                <em:maxVersion>34.0.*</em:maxVersion>
            </Description>
        </em:targetApplication>

        <!-- Front end metadata. -->
        <em:name>CloudGem</em:name>
        <em:description>A description of GloudGem.</em:description>
        <em:creator>Me</em:creator>
        <em:homepageURL>http://cloudgem.net/</em:homepageURL>
    </Description>
</RDF>
C:\Projects\CloudGem\plugin\
此文件的副本存在于我的Firefox开发者档案的
extensions
文件夹中

发生了什么
  • Firefox似乎没有问题地加载扩展。它出现在活动插件列表中。所有元数据都是正确的

  • 正在运行
    chrome://cloudgem/content/cloudgem.xul
    在地址栏中按预期运行脚本,在控制台上生成消息

  • 大约一个月前,我创建了另一个结构几乎相同的扩展。它已加载,脚本按预期执行

  • 现在的问题是,代码将无法运行。\uuuuuuuuxfirefox启动时,它绝对不会执行任何操作。没有错误。控制台上没有消息。它就像一只笨狐狸一样坐在那里,不运行我的代码。此外,我之前的扩展在一个月前就开始工作了,但在启动时也莫名其妙地停止了运行

我已经试过了
  • 创建一个全新的开发者档案并在那里安装插件。同样的结果

  • 将控制台输出调用更改为
    dump()
    调用、引发异常、更改窗口标题等。结果相同

  • 更改文件名。同样的结果

  • 迁移到其他计算机(这次运行的是Windows XP)。同样的结果

  • 复制
    components
    文件夹中的
    cloudgem.js
    代码,并将其作为脚本在XUL覆盖中运行。这是针对FF没有运行
    components
    文件夹中的代码这一事实的黑客攻击。这两个代码实例都不会运行

正如我所说,我完全没有主意了。我不知道为什么浏览器启动时没有运行。从现在到一个月前代码运行时,我的系统上唯一的变化是对我的操作系统、Firefox和病毒检查器的一些例行更新。禁用我的病毒检查器(Avast)的“web屏蔽”并不能解决问题,病毒检查器也不会对插件发出任何明显的噪音

有人能提出解决办法吗?我在MDN文章上下翻找,什么也没找到


非常感谢。

我想您可能看错了控制台。加载项将信息输出到浏览器控制台。更一般的问题是如何在浏览器控制台上查看输出

这不是很明显,但是你可以按照以下两个步骤来做

1) 在位置栏中键入
about:config
,并查找
loop.debug.loglevel
,将值更改为
all
,以确保所有输出都已记录

您可能需要重新启动浏览器

2) 通过Ctrl+Shift+j或汉堡菜单->开发者->浏览器控制台打开浏览器控制台

信息应该打印在那里


文件名中的
@
cloudgem@cloudgem.net是坏的,我很确定,所以一定要删除它。让我知道这是否解决了问题,如果不是,我会读更多。创建问题做得很好。:)还有github吗?你能把它上传成一个回购协议吗?它能帮助我向你展示我在调试中尝试过的东西吗it@Noitidart:谢谢你的帮助。我已将所有文件上载到。Windows对文件名中的
@
没有问题。它可能只是一个Unix/Linux的东西。关于创建FF扩展的MDN文章实际上建议projectname@yourdomain.whatever作为插件的唯一ID。我使用的一些其他插件(如Fibug)也使用这个约定。我会在一些重要工作的中间看一看。他们建议将其作为ID,而不是文件名。我猜它并没有解决它,是吧?@Noitidart:我会试试,让你知道的如果我在几分钟内没有回复,那就假设它不起作用。@lpiepiora:浏览器控制台与检查窗口中的调试控制台完全不同,这一点也不明显。信息出现在前者中,但不出现在后者中。我想Mozilla在他们的设计中把狗搞砸了。但至少我现在可以得到一些合理的产出。