Mozilla XPCOM组件开发常见错误解决方法

最近做Firefox的开发,一直在用javascript写XPCOM组件,javascript这个东东来写XPCOM非常痛苦,有一点错误都无法注册成功,许多时候基本靠肉眼一个单词一个单词的找,当然也有一些技巧。Firefox开发最常用的工具有firebug,javascript Debug和XPCOMViewer,使用XPCOMViewer来查看已注册的组件。

常见的错误:

一、死活注册不上:

注释掉其他方法和成员变量,只保留QueryInterface方法,这样基本都会注册成功了,一旦注册成功,取消掉注释,就可以使用javascript Debug来调试了。

二、查看XPCOM Viewer(点击要找的XPCOM展开树)发现该XPCOM没有实现指定的接口或者莫名其妙的实现了没有指定的接口:

没有实现接口: 一般可能idl的接口没有实现nsISupports导致

实现了没有指定的接口:一班可能是copy别的代码,uuid重复导致

三、Cc["@company.name;1"].getService(Ci.interfaceName)或Cc["@company.name;1"].createInstance(Ci.interfaceName)出现错误,这里的Cc(Components.classes)Ci(Components.interface):

Cc["@company.name;1"] has no properties 说明中括号中组件Constract ID写错或者组件没有注册成功

Invalid InterfaceID: 说明Ci中括号中的名字写错,或者没有该接口(可以通过XPCOM Viewer查看现有的接口)

四、参数不匹配

IDL的声明参数和实际传递的参数不匹配,特别修改过参数,是注册的接口没有更新,这时候最难发现

五、已注册上组件每次在删除掉xpti.dat和compreg.dat后又注册不上,但也找不到问题所在,可以试一试在原来的代码

加减一空行,以示改变,这样可能会被注册成功。

【待续】

你可能感兴趣的:(JavaScript,Firebug,firefox)