2

这是代码片段:

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 怎么办?

4

1 回答 1

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 中添加一些管理方法。

于 2011-04-21T14:59:58.317 回答