阅读:2090回复: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(); })(); |
|