如何在火狐扩展的新选项卡中打开网址
How do I open a url in a new tab in a firefox extension?
我正在创建一个Firefox插件,当单击工具栏按钮时,它会在新选项卡中打开一个网站。当我单击工具栏按钮时,我没有得到响应。我的代码中缺少什么吗?
篇一:
var app = function () {
var prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
return {
init : function () {
gBrowser.addEventListener("load", function () {
var toRun = prefManager.getBoolPref("extensions.app.autorun");
if (autoRun) {
app.run();
}
}, false);
},
run : function () {
var head = content.document.getElementsByTagName("head")[0],
style = content.document.getElementById("app-style"),
allLinks = content.document.getElementsByTagName("a"),
foundLinks = 0;
if (!style) {
style = content.document.createElement("link");
style.id = "app-style";
style.type = "text/css";
style.rel = "stylesheet";
style.href = "chrome://app/skin/skin.css";
head.appendChild(style);
}
},
click : function () {
gBrowser.addEventListener("click", function () {
gBrowser.addTab("https://www.google.com");
}, false);
},
}
};
篇二:
function installButton(toolbarId, id, afterId) {
if (!document.getElementById(id))
var toolbar = document.getElementById(toolbarId);
// If no afterId is given, then append the item to the toolbar
var before = null;
if (afterId) {
var elem = document.getElementById(afterId);
if (elem && elem.parentNode == toolbar)
before = elem.nextElementSibling;
}
toolbar.insertItem(id, before);
toolbar.setAttribute("currentset", toolbar.currentSet);
document.persist(toolbar.id, "currentset");
if (toolbarId == "addon-bar")
toolbar.collapsed = false;
}
};
Application.getExtensions(function (extensions) {
var extension = extensions.get("app@app.com");
installButton("nav-bar", "app-toolbar-button");
});
window.addEventListener("load", app.init, false);
window.addEventListener("click", app.click, false);
我认为你应该使用正常的方式(这些是我的常规插件的摘录):
1) 铬清单文件
# ... here is packages definitions ...
# Overlays for Mozilla Firefox
overlay chrome://browser/content/browser.xul chrome://xpcomviewer/content/overlay-firefox.xul
# This is needed for toolbar
style chrome://global/content/customizeToolbar.xul chrome://xpcomviewer/skin/overlays.css
# ...
2) 内容/叠加层
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://xpcomviewer/skin/overlays.css" type="text/css"?>
<!DOCTYPE overlay [
<!ENTITY % brandDTD SYSTEM "../locale/en-US/brand.dtd">
%brandDTD;
<!ENTITY % overlayDTD SYSTEM "../locale/en-US/overlays.dtd">
%overlayDTD;
]>
<overlay id="eXpcomViewerBrowserOverlay"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/javascript"
src="chrome://xpcomviewer/content/overlays.js"></script>
<!-- Toolbar palette overlay -->
<toolbarpalette id="BrowserToolbarPalette">
<toolbarbutton id="xpcomviewer-toolbarbutton"
class="toolbarbutton-1"
oncommand="xpcomviewer.overlay.open();"
label="&xpcomviewerCmd.label;"
accesskey="&xpcomviewerCmd.key;"
tooltiptext="&xpcomviewerCmd.tip;"/>
</toolbarpalette>
</overlay>
3)内容/叠加.js
/* Copyright (c) 2007-2012 ondrejd.info
See the file LICENSE.txt for licensing information. */
/*
#include "global.js"
*/
// Namespace
if(typeof(xpcomviewer) == "undefined") var xpcomviewer = {};
if(typeof(xpcomviewer.overlay) == "undefined") xpcomviewer.overlay = {};
// Implementation of xpcomviewer.overlay
(function() {
/** @type String */
const kFIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
/** @type String */
const kSEAMONKEY_ID = "{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}";
/** @type String */
const kTHUNDERBIRD_ID = "{3550f703-e582-4d05-9a08-453d09bdfdc6}";
/** @type String */
const kWIN_URI = "chrome://xpcomviewer/content/xpcomviewer.xul";
/** @type Components.interfaces.nsIPrefBranch */
const kPREF_SRV = Components.classes["@mozilla.org/preferences-service;1"].
getService(Components.interfaces.nsIPrefService).
getBranch("extensions.xpcomviewer.");
/**
* Opens XPCOMViewer.
*
* @returns {void}
*/
this.open = function()
{
let useTab = kPREF_SRV.getBoolPref("useTab");
if(useTab === true) {
this.openInTab();
} else {
this.openInWindow();
}
}; // end open()
/**
* Opens XPCOMViewer in a standalone window.
*
* @returns {void}
*/
this.openInWindow = function()
{
let win = window.open(
kWIN_URI,
"xpcomviewer",
"chrome,extrachrome,menubar,toolbar,resizable,all"
);
win.focus();
}; // end openInWindow()
/**
* Opens XPCOMViewer in a new tab if is running on Firefox, SeaMonkey or
* Thunderbird. Otherwise opens in a new window.
*
* @returns {void}
*/
this.openInTab = function()
{
let appInfo = Components.classes["@mozilla.org/xre/app-info;1"].
getService(Components.interfaces.nsIXULAppInfo);
if(appInfo.ID == kFIREFOX_ID || appInfo.ID == kSEAMONKEY_ID) {
xpcomviewer.global.openUrlInInternalBrowser(kWIN_URI);
} else if(appInfo.ID == kTHUNDERBIRD_ID) {
xpcomviewer.global.openUrlInContentTab(kWIN_URI);
} else {
this.openInWindow();
}
}; // end openInTab()
}).apply(xpcomviewer.overlay);
4)皮肤/覆盖层.css
@import url("chrome://global/skin/");
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
/* Copyright (c) 2005-2012 Ondrej Donek.
* See the file LICENSE.txt for licensing information. */
.icon16 {
list-style-image: url("chrome://xpcomviewer/skin/icons16.png");
-moz-image-region: rect(16px 16px 32px 0px);
}
#xpcomviewer-toolbarbutton {
list-style-image: url("chrome://xpcomviewer/skin/icon22.png");
}
toolbar[iconsize="small"] #xpcomviewer-toolbarbutton {
list-style-image: url("chrome://xpcomviewer/skin/icons16.png");
-moz-image-region: rect(16px 16px 32px 0px);
}
#mini-xpcomviewer {
list-style-image: url("chrome://xpcomviewer/skin/icons16.png");
-moz-image-region: rect(16px 16px 32px 0px);
}
相关文章:
- 我的单元测试选项是什么
- 如何更改bigquery API中的计费层选项
- 使用Javascript获取所选选项ID
- Selectize.js:如何对整数值的选项进行排序
- 通过js在新选项卡中有条件地打开url
- 按照选项卡索引的顺序循环一个jQuery选择
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 无法在Ionic select中预先选择最后一个选项
- 如何在选项卡上定义属性'的主窗口对象
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 使用此选项选择父类内部的类
- CKeditor:更改对话框中的默认选择选项
- 如何在火狐扩展的新选项卡中打开网址
- 火狐错误 - 悬停时选项消失
- 通过火狐扩展在特定位置打开选项卡
- 为什么选择选项上的 .click() 只适用于火狐浏览器
- 当选项卡加载火狐插件SDK时返回函数
- 当我将鼠标悬停在动态创建的行上时,行中的选择元素(标签)选项无法正确下拉.火狐问题
- 火狐扩展 - >获取显示选项卡的内容
- 重定向特定选项卡 火狐附加组件.