在选项卡中显示带有单独JavaScript文件的本地html页面
问题描述:
我有一个简单的插件,它将一个按钮添加到工具栏。在选项卡中显示带有单独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的文档是一个巨大的混乱与旧的信息不起作用。)
答
首先,你与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>
谢谢你,我只是从一些文件复制它,它是我把自己的唯一的事 - 我一直战斗在Mozilla相当长一段时间,因为文档就是这样。我之前尝试过相对的chrome url,它不适用于某些知道为什么理由的人,现在它做了(?)。所以谢谢你,这解决了这个问题,并感谢你为窗口命令的简化。 – mikkom 2012-02-02 16:43:06