runking
火狐狸
火狐狸
  • UID35372
  • 注册日期2011-03-03
  • 最后登录2016-01-14
  • 发帖数165
  • 经验41枚
  • 威望0点
  • 贡献值50点
  • 好评度1点
  • 社区居民
阅读:1860回复:0

UC.js书签弹出正常,历史弹出不正常,求大神分析原因

楼主#
更多 发布于:2013-07-19 02:34
// ==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();
})();
游客

返回顶部