2012-02-02 70 views
0

我有一个简单的插件,它将一个按钮添加到工具栏。在选项卡中显示带有单独JavaScript文件的本地html页面

我想要这个工具栏打开一个标签,显示一个本地html页面,它使用javascript来获取一些url,处理数据,然后根据这些数据在屏幕上显示内容。我希望这发生在通常的浏览器选项卡上,而不是一些扩展窗口。

我想扩展是可移植的在多个平台(通过使用HTML文件和JavaScript),所以我想只是有一个选项卡与HTML页访问JavaScript文件在同一目录。

我用这对我的按钮,在打开的选项卡:

var win = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
    .getInterface(Components.interfaces.nsIWebNavigation) 
    .QueryInterface(Components.interfaces.nsIDocShellTreeItem) 
    .rootTreeItem 
    .QueryInterface(Components.interfaces.nsIInterfaceRequestor) 
    .getInterface(Components.interfaces.nsIDOMWindow); 

var tab = win.gBrowser.addTab(); 
win.gBrowser.selectedTab = tab; 

我应该在此之后上传的内容显示本地,延长包装(我不知道在哪里将它打包),HTML网页,将访问一个单独的JavaScript文件。

(这可能是一个很简单的问题,但Mozilla的文档是一个巨大的混乱与旧的信息不起作用。)

回答

1

首先,你与nsIInterfaceRequestor花哨的招数似乎是不必要的 - 这是一个非常写作的复杂方式:

var win = window; 

你写什么有必要从内容页面的浏览器窗口来获得 - 正常window.top不会因为内容和Chrome之间的安全边界的工作。但您的按钮已在浏览器窗口中为

由于您已经有一个按钮 - 您必须使用覆盖层,这意味着您注册了一个chrome://命名空间。要打开你的页面,您可以使用loadOneTab method(这有一个你并不需要明确地选择选项卡中的优势):

window.gBrowser.loadOneTab("chrome://myextension/content/page.html", {inBackground: false}); 

当然,你应该在这里改变myextension,它应该是你的镀铬命名空间。 page.html应该放在您有覆盖层的相同目录中(通常为chrome/content/)。你可以只用楷书标记加载在同一目录中的JavaScript文件:

<script type="text/javascript" src="script.js"></script> 
+0

谢谢你,我只是从一些文件复制它,它是我把自己的唯一的事 - 我一直战斗在Mozilla相当长一段时间,因为文档就是这样。我之前尝试过相对的chrome url,它不适用于某些知道为什么理由的人,现在它做了(?)。所以谢谢你,这解决了这个问题,并感谢你为窗口命令的简化。 – mikkom 2012-02-02 16:43:06

相关问题