2012-08-24 33 views
1

我正在开发Firefox的Addon SDK(v1.9)上的扩展。我的扩展通过实现nsIContentPolicy来阻止或允许资源,并根据要阻止的URI数据库测试它们的URI。如何从nsIContentPolicy的加载资源中获取标签shouldLoad

问题

我需要有从nsIContentPolicy的shouldLoad功能访问的标签对象(如果可用)。

我假设这个部分是用于nsISupports的shouldLoad函数的“context”参数。我尝试过使用getTabForWindow(win),因为上下文不是nsIDOMWindow(Identify tab that made request in Firefox Addon SDK

回答

2

context参数是文档或元素。从那里获取到窗口并不难:

var {Ci} = require("chrome"); 
if (!(context instanceof Ci.nsIDOMWindow)) 
{ 
    // If this is an element, get the corresponding document 
    if (context instanceof Ci.nsIDOMNode && context.ownerDocument) 
    context = context.ownerDocument; 

    // Now we should have a document, get its window 
    if (context instanceof Ci.nsIDOMDocument) 
    context = context.defaultView; 
    else 
    context = null; 
} 

// If we have a window now - get the tab 
if (context) 
{ 
    var tabsLib = require("tabs/tab.js"); 
    return tabsLib.getTabForWindow(context.top); 
} 
else 
    return null; 

参考:NodeDocumentwindow

+0

再次感谢您的帮助。当我试图解决这个问题时,它不起作用的原因是因为我试图从main_frame(TYPE_DOCUMENT)资源加载的上下文中获取选项卡。而这仍然无法这样做,是否有可能从main_frame资源获取标签? – josesigna

+0

所以我想出main_frames(TYPE_DOCUMENT)有一个XULElement作为上下文,所以我们通过调用context._contentWindow.top来获得窗口对象,当它与getTabForWindow()一起使用时,它提供了正确的Tab对象。因此,要发布完整答案,问题应该是如何测试XULElement的上下文。 – josesigna

+0

或者我们可以测试context._contentWindow!== undefined – josesigna