Javascript 从Firefox扩展(Zotero translator)强制调试打印输出

Javascript 从Firefox扩展(Zotero translator)强制调试打印输出,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,使用Firefox28,在Ubuntu 11.04 GNU/Linux上安装Firebug 1.12.7 我正在使用Firefox插件Zotero4.0.17.1。作为安装的一部分,Zotero在firefox\u profile/Zotero/translators/中安装所谓的翻译器(JavaScript代码)。我想更改转换器中的一些内容(firefox\u profile/zotero/translators/BibTeX.js)。我使用它的方式是在Zotero首选项/导出/快速复制/默认

使用Firefox28,在Ubuntu 11.04 GNU/Linux上安装Firebug 1.12.7

我正在使用Firefox插件Zotero4.0.17.1。作为安装的一部分,Zotero在
firefox\u profile/Zotero/translators/
中安装所谓的翻译器(JavaScript代码)。我想更改转换器中的一些内容(
firefox\u profile/zotero/translators/BibTeX.js
)。我使用它的方式是在Zotero首选项/导出/快速复制/默认输出格式下拉列表中设置BibTex;然后,当我使用Ctrl+Shift+C并选中Zotero项目时,我会在剪贴板上得到一个bibtex格式的文本

我可以确认更改
BibTeX.js
文件是否有效,因为我可以将新字段添加到
fieldMap
,保存
BibTeX.js
文件,然后在对某个项目使用Ctrl+Shift+C后立即(无需重新启动Firefox)将这些字段放入剪贴板。到目前为止,一切顺利

然而,我想调试一些东西——结果证明这是非常困难的;下面的帖子总结了我使用
console.log()
的经验:

:

对于开发人员来说,这只是一个问题,我正在尝试找到登录javascript代码的正确方法,比如使用firebug console.log函数。
我尝试了不同的方法,比如console.log、firebug.console.log、alert。。。没有人工作。
你通常怎么做

Zotero.debug()

现在,
Zotero.debug()
实际上需要启用:

  • 打开Zotero首选项的高级窗格
  • 单击调试输出日志下的“启用”
  • 我这样做了,然后我可以在首选项中看到“0行记录”条目开始填充,然后我可以单击查看输出-实际上,当我在一个项目上单击Ctrl+Shift+C时,那里有一些Zotero调试消息,从而触发
    BibTex.js

    除了-这里是kicker-no
    Zotero.debug
    from
    BibTex.js
    存在!?无论是我在每个函数开始时尝试手动添加的那些;也没有那些已经存在于源代码中的代码出现?好的,源代码中的大多数
    Zotero.debug
    s都在一些
    if
    条件中,可能没有命中它们;然而,我添加的是在每个函数启动时-仍然没有打印消息?!(在这个调试输出中可以看到,比如说,精确地解析了
    BibTex.js
    的初始JSON字符串,因此确定了正确的文件地址)

    由此,我的第一个问题是:这个“翻译器”JavaScript在不同于普通扩展JavaScript的上下文中运行是否正确?如果是这样,这将解释为什么
    console.log()
    (或
    console.error()
    )无法打印任何内容

    第二个问题:像这样从JavaScript文件打印任何类型的调试,我需要什么选项?似乎我无法从那里调用
    window.alert()
    。。。如果在Zotero调试输出日志或Firefox“浏览器控制台”(据我所知,它取代了扩展JavaScript消息的旧“错误控制台”)中无法获得任何信息,我甚至会写入文件

    (我也尝试过
    firefox-zoterodebug
    ,它只是在终端的stdout上提供相同的Zotero调试输出,而
    BibTex.js
    消息仍然缺失,因此这不是解决方案……)

    非常感谢您的回答,

    干杯

    好的,明白了-原来,
    BibTex.js
    有两种执行模式:

    • doExport()
      ->
      buildCiteKey()
      writeField()
    • doImport()
      ->
      beginRecord()
      ->
      processField()
      
    我试图记录,比如说,
    processField
    ,但我只是通过Ctrl+Shift+C触发了
    doExport
    ,这不会触发
    processField
    ,这是一个导入函数。。。现在,我尝试只在
    doExport
    路径中记录函数,它们开始显示在日志中


    但是学习一下还是很好的——为什么JavaScript不能在这个扩展代码中登录到Firefox控制台?

    你不能使用console.log吗

    只需执行
    console.log('我现在正在转储一个对象=',obj)

    然后在浏览器控制台中,当你点击“obj”链接时,它就会被打印出来


    事实证明,如果在开始时添加了一个
    Zotero.debug()
    ,并且将其放在函数
    buildCiteKey
    中的第一位,那么
    Zotero.debug()将在
    BibTex.js
    中工作;不确定这是否意味着像
    getFieldValue()
    这样的函数没有启动??转换器是在沙盒环境中执行的,并不是每个函数都可用。您应该使用
    Zotero.debug
    来记录消息。