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 に答える