以下是代码段:
Components.classes['@mozilla.org/safebrowsing/application;1']
.getService().wrappedJSObject.malwareWarden.listManager_
.safeLookup(test_url, function(tableName){
if (tableName == 'goog-phish-shavar' || tableNmae == 'goog-malware-shavar') {
alert('This is reported by Google! ');
};
});
它工作正常,但我认为这不是'正确'的方式......
如果用户更改DataProvider会怎样?
答案 0 :(得分:3)
使用wrappedJSObject访问XPCOM对象的任何方法或属性是一个等待发生的问题。通过wrappedJSObject访问的任何内容都被视为“私有”数据和方法 - 在将来的版本中可能会破坏。尽量避免它。
好消息是“listManager”本身就是一个全球XPCOM服务。使用以下方式直接访问它:
var Cc = Components.classes; var Ci = Components.interfaces; var listManager = Cc["@mozilla.org/url-classifier/listmanager;1"].getService(Ci.nsIUrlListManager);
至于更改数据提供者,在此之前需要对Firefox进行大量的代码更改。如果是这样,我们希望也可以为XPCOM添加一些管理方法。