|
阅读:2182回复:0
UC.js书签弹出正常,历史弹出不正常,求大神分析原因// ==UserScript==
// @name runking@jam.uc.js
// @namespace
// @description 多功能按钮:右键书签、左键历史、中键“前进/后退 历史”(backForwardMenu,不知道怎么翻译好)。
// @include main
// @compatibility Firefox 15.0+
// @author runking/jam
// @homepage https://dl.dropbox.com/u/4865882/runking%40jam.uc.js
// @version 0.0.2.2012.10.15
// @updateURL https://dl.dropbox.com/u/4865882/runking%40jam.uc.js
// 已知BUG:
// 1.打开书签、历史会使菜单栏显出来。(暂时不准备修复)
//修复中
// 2.历史记录弹出有问题
//
// ==/UserScript==
/*
更新历史
0.0.2.2012.10.15:
1.修正:右键打开历史会触动火狐的另一个事件。
2.修正:在书签或历史条目上无法触发右键。
0.0.1.2012.10.10:
初始版本。
*/
// ==/UserScript==
const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
location == "chrome://browser/content/browser.xul" && (function() {
function createBtn() {
var navigator = document.getElementById("navigator-toolbox");
if (!navigator || navigator.palette.id !== "BrowserToolbarPalette") return;
var Historymenu = document.createElementNS(XULNS, 'toolbarbutton');
Historymenu.id = "Historymenu";
const localeString = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch).getCharPref("general.useragent.locale");
const labelText = localeString.indexOf("zh") == -1?"3 in 1 button":"\u591a\u529f\u80fd\u6309\u94ae";//create variable Label & tooltip in languages
const tooltipText = localeString.indexOf("zh") == -1?"Left Click: bookmarks\nMiddle: backForwardMenu\nRight: history":"\u5de6\u952e\uff1a\u4e66\u7b7e\n\u4e2d\u952e\uff1a\u6807\u7b7e\u5386\u53f2\n\u53f3\u952e\uff1a\u5386\u53f2";
Historymenu.setAttribute("label", labelText);
Historymenu.setAttribute("tooltiptext", tooltipText);
Historymenu.setAttribute("class", "toolbarbutton-1 chromeclass-toolbar-additional");
Historymenu.setAttribute("type", "menu");
Historymenu.setAttribute("removable", "true");
Historymenu.style.listStyleImage = "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAm5JREFUeNp0U01oknEYf319tVCXpEM3hEhmSiE0P4qiQdBgBWIbXrwEetptGCzwkBC7RHSqQ0YHD546RIGHdVgwTA9K4ebFAkNyoIiiTBSXvn71e15ex9jcA7/3+T//5+P/fL3MeDxmpkGr1T4GDoifZ0OQ0Oc0zc7OXpbJZD9YllWORqNOv9+/Xa/XD5kpxE67hPNrqVSqRACGOMnMOXQmgF6vf8RxnBsgZ4Y4yXQ/LYBQwvz8/B2cHwAuGF+Ty+WD04Y8z3ODweAPjtvAbqVSSQsBDAbDDl6yASMC0h4jwJHJZMpBHtZqNX21WjUuLS3tJBKJh8PhkBWxXyqVVjgEUHc6nf7kJZ1OdxCJRN4ZjUZ6bQSoY7HYzdXV1R2r1boCeUhQKpVqsudCodD7ra2tF0jvAl0EAoGwy+XS9nq9VxD3gCeFQiEDfkj9EJw4rhcMBj8ITXS73V/W1tY+odPUfQbj+ga+odFoWKRdgvM/chanI4DsPR7P5+Mmgq76fL63+Xz+VqvVks/MzPASiYTpdrtSZCKdlKdWq3mz2fwzGo0GIBZPjrGoUCj2KcVcLreRTqc3U6nU5vLy8ldsIj83N9eMx+PPSE92E2ehnMmh2Wz2xRo/0mdxcfESylhHykOHw7Hr9XpTpG+320cnx3scAClfpMUhstvtN7LZLE3hJaDJZDJ/k8nkG5VKxWCtVVMDYOcVtLpOp/M5Xn0K/gvXJVIh+F30hVZ7DB07NQDmnqcy8CPdt9ls2xaLJev3+/fC4fD1YrHIl8tlc6PRuLKwsPD7zCqLZADuAQ2gBlRFrqNfRORa4LuoE+i/AAMAhc0Qsr/ikkUAAAAASUVORK5CYII=)"; //找到好看的图标自己改吧。
navigator.palette.appendChild(Historymenu);//用于可移动按钮
//document.getElementById("urlbar-icons").appendChild(Historymenu);//用于固定按钮位置
//可选固定位置 status-bar urlbar-icons addon-bar alltabs-button TabsToolbar
Historymenu.addEventListener("click",
function(event) {
/*if (event.button == 2) {
event.preventDefault();
event.stopPropagation();
undoCloseTab();
}*/
switch(event.button) {
case 0: // Left click
//var BMB_bookmarksPopup = document.getElementById("BMB_bookmarksPopup");BMB_bookmarksPopup.openPopupAtScreen(event.screenX,event.screenY,true);
//var bookmarksMenuPopup = document.getElementById("bookmarksMenuPopup");bookmarksMenuPopup.openPopupAtScreen(event.screenX,event.screenY,false); //两个不一样。这个需要把那个带三角的书签栏拖出来。*/
Historymenu.removeChild(popup);
Historymenu.appendChild(bm); //显示书签
popup.openPopupAtScreen(event.screenX,event.screenY,false);
event.preventDefault();
break;
case 1: // Middle click
var backForwardMenu = document.getElementById("backForwardMenu");backForwardMenu.openPopupAtScreen(event.screenX,event.screenY,false);
break;
case 2: // Right click
Historymenu.removeChild(bm);
Historymenu.appendChild(popup); //显示历史记录
popup.openPopupAtScreen(event.screenX,event.screenY,false);
event.preventDefault();
//var goPopup = document.getElementById("goPopup");goPopup.openPopupAtScreen(event.screenX,event.screenY,false);
//event.preventDefault();
//event.stopPropagation();
break;
}
},
false);
//书签菜单
var bm = document.createElementNS (XULNS, 'menupopup');
bm.setAttribute ('placespopup', 'true');
bm.setAttribute ('oncommand', 'BookmarksEventHandler.onCommand(event, this.parentNode._placesView);');
bm.setAttribute ('onclick', 'BookmarksEventHandler.onClick(event, this.parentNode._placesView);');
bm.setAttribute ('onpopupshowing', "if (!this.parentNode._placesView) new PlacesMenu(event, 'place:folder=BOOKMARKS_MENU');");
bm.setAttribute ('tooltip', 'bhTooltip');
bm.setAttribute ('popupsinherittooltip', 'true');
//历史菜单
var popup = document.createElementNS(XULNS, 'menupopup');
popup.setAttribute('placespopup', 'true');
popup.setAttribute('oncommand', 'this.parentNode._placesView._onCommand(event);');
popup.setAttribute('onclick', 'checkForMiddleClick(this, event);');
popup.setAttribute('onpopupshowing', 'if (!this.parentNode._placesView) new HistoryMenu(event);');
popup.setAttribute('tooltip', 'bhTooltip');
popup.setAttribute('popupsinherittooltip', 'true');
//最近关闭的标签页
item = document.getElementById('historyUndoMenu');
if (item) {
item = item.cloneNode(false);
item.setAttribute('id', 'Historymenu_recentlyClosedTabsMenu');
itemPopup = document.createElementNS(XULNS, 'menupopup');
itemPopup.setAttribute('id', 'Historymenu_recentlyClosedTabsMenupopup');
itemPopup.setAttribute('onpopupshowing', "document.getElementById('Historymenu')._placesView.populateUndoSubmenu();");
itemPopup.setAttribute('placespopup', 'true');
item.appendChild(itemPopup);
popup.appendChild(item);
}
//查看所有历史记录
item = document.createElement('menuitem');
item.setAttribute('id', 'Historymenu_allhistory');
item.setAttribute("label", '\u67E5\u770B\u6240\u6709\u5386\u53F2\u8BB0\u5F55');
item.setAttribute('oncommand', "toggleSidebar('viewHistorySidebar');");
popup.appendChild(item);
//分割线
item = document.getElementById('startHistorySeparator');
if (item) {
item = item.cloneNode(false);
item.setAttribute('id', 'Historymenu_startHistorySeparator');
popup.appendChild(item);
}
Historymenu.appendChild(bm); //显示书签
document.insertBefore(document.createProcessingInstruction('xml-stylesheet', 'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent('\
#Historymenu menuitem {\
max-width: 200px !important;\
}\
') + '"'), document.documentElement);
}
function updateToolbar() {
var toolbars = document.querySelectorAll("toolbar");
Array.slice(toolbars).forEach(function(toolbar) {
var currentset = toolbar.getAttribute("currentset");
if (currentset.split(",").indexOf("Historymenu") < 0) return;
toolbar.currentSet = currentset;
try {
BrowserToolboxCustomizeDone(true);
} catch(ex) {}
});
}
createBtn();
updateToolbar();
})(); |
|