创建XPCOM组件 3. 使用XPCOM组件

 缩了很多水...

 

 

 

3. 使用XPCOM组件

原文:https://developer.mozilla.org/en/Creating_XPCOM_Components/Using_XPCOM_Components

    玩转XPCOM的最好方法是是先看看它如何被客户端使用。

    Mozilla浏览器之类的应用程序是复杂、模块化的XPCOMzujian组件的客户。实际上,几乎所有和浏览器相关的功能,如导航、窗口管理、cookie管理、书签、安全、搜索、渲染等,都定义于XPCOM中,并通过那些组件接口进行访问。Mozilla由XPCOM组件组成。

组件示例

cookie管理器

接口nsICookieManager

removeAll 删除所有cookie
enumerator 枚举cookie
remove 删除指定的cookie

在js中取得CookieManager组件

// xpconnect
var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
                     .getService();
cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);


function FinalizeCookieDeletions() {
    for (var c=0; c<deletedCookies.length; c++) {
        cmgr.remove(deletedCookies[c].host,
                    deletedCookies[c].name,
                    deletedCookies[c].path);
    }
    deletedCookies.length = 0;
}

从接口连接组件

    上面,从js中连接组件的技术叫做XPConnect。它允许在js中调用XPIDL定义的接口方法。XPConnect将应用程序代码绑定到Mozilla浏览器的用户界面、其它基于Gecko的XUL和js环境(如xpcshell)。关于XPConnect和js的更多信息,参考http://www.mozilla.org/scriptable/。

    ...

JavaScript和Mozilla

...

组件WebBrowserFind

接口nsIWebBrowserFind

findNext 查找下一个
findBackwards 布尔属性,让findNext()向上搜索
searchFrames 布尔属性,指定是否要搜索子框架
matchCase 布尔属性,指定是否要区分大小写
entireWord 布尔属性,指定是否要匹配整个单词

...

组件WebLock

接口IWebLock

lock 锁定浏览器为当前站点(或读取自磁盘的站点白名单)
unlock  
addSite 添加到白名单
removeSite  
sites 枚举白名单

...

在Mozilla中使用组件

查找Mozilla组件

    Mozilla提供了一些工具,可以查找和显示Gecko中有效的接口信息,有XPCOM Component Viewer和MXR。前者不会区分冻结或非冻结接口(在Gecko 2.0中已经不存在冻结接口);后者是一个基于Web的源码查看工具,被冻结的接口在源码的最上方被标记为@status frozen。

XPCOM Component Viewer

    XPCOM Component Viewer是一个插件,你可以在浏览器中安装(在沙盒中,目前无效)。替代地,可以试试另外一个类似的插件XPCOMViewer。

创建XPCOM组件 3. 使用XPCOM组件_第1张图片

...

在Cpp中使用XPCOM组件

nsCOMPtr<nsIServiceManager> servMan;
nsresult rv = NS_GetServiceManager(getter_AddRefs(servMan));
if (NS_FAILED(rv))
    return -1;

nsCOMPtr<nsICookieManager> cookieManager;
rv = servMan->GetServiceByContractID("@mozilla.org/cookiemanager",
                                    NS_GET_IID(nsICookieManager),
                                    getter_AddRefs(cookieManager));

if (NS_FAILED(rv))
    return -1;

PRUint32 len;
deletedCookies->GetLength(&len);

for (int c=0; c<len; c++)
    cookieManager->Remove(deletedCookies[c].host,
                          deletedCookies[c].name,
                          deletedCookies[c].path,
                          PR_FALSE);

XPConnect:在脚本中使用XPCOM组件

var cmgr = Components.classes["@mozilla.org/cookiemanager;1"]
                     .getService();
cmgr = cmgr.QueryInterface(Components.interfaces.nsICookieManager);


function loadCookies() {
    // load cookies into a table
    var enumerator = cmgr.enumerator;
    var count = 0;
    var showPolicyField = false;
    while (enumerator.hasMoreElements()) {
        var nextCookie = enumerator.getNext();
        nextCookie = nextCookie.QueryInterface(Components.interfaces.nsICookie);
        /* .... */
    }
function FinalizeCookieDeletions() {
    for (var c=0; c<deletedCookies.length; c++) {
        cmgr.remove(deletedCookies[c].host,
                    deletedCookies[c].name,
                    deletedCookies[c].path,
                    false);
    }
    deletedCookies.length = 0;
}

...

 

你可能感兴趣的:(c,function,浏览器,getter,mozilla,Components)