火狐內建的藏太裡面了,要打開不方便,在導航列新增按鈕。
打開記事本,檔名:quickProxyModok,附檔名:.uc.xul
打開記事本,檔名:quickProxyModok,附檔名:.uc.xul
<?xml version="1.0"?> <!-- // ==UserScript== // @name quickProxyModoki_Fx29.uc.xul // @namespace http://space.geocities.yahoo.co.jp/gl/alice0775 // @description quickProxy // @include main // @compatibility Firefox 29+ // @author Alice0775 // @version 2014/05/13 10:30 fix second window --> <?xml-stylesheet href="data:text/css,@namespace%20url('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul');@namespace%20html%20url('http://www.w3.org/1999/xhtml'); .quickproxy-status-on { list-style-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABW0lEQVQ4jY3TsWoUURTG8V8kwrYKFiksRdGIEk1I3sDKV7DxKcTCIp0ohu2TxiKNkiqWAwohu3tu0tnmAdIIgmaFuDZnlrtD3OTCMHPnnPnP+b5zLp1VWC/0g+PCuDDO5/6AjW5+vRaCncJk3hXsvOHazJcNi4X9TPo7B9DGvgTX67K3M3Ce94M5kPO2EjBiraLvBiWhry6rZMCG4EMSP3/jxiH3g5Xgx2V+FPoKkZsnraQht4O9ws+OgaeFT8HH3B8rnBUmDb1uW0YsB79awJBnaXovAX+mgOB1w+IFc7FZVfASgqV8N64lTArbXUDwoo0PeJQSH08lVCb+/sqtC2Q8T8BuBX07NXHA01ZPcK8LOOBm4fshdxJ4t/JlvTtIJ8HDLqTqzoPCycwgpavTUU76+2ClodfQy7l4V/15f2aUK21XOkxY+F+VhqwGW8FRtvgsOAq2Rqx18/8B9UkbjtKiOoEAAAAASUVORK5CYII='); } .quickproxy-status-off { list-style-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABbUlEQVQ4jY2Tu0oDQRSGJxJhSxEsLCxF8YKS1eAWZ+b8f2XlK9j4FGJpJ0okvWks0ihW+gZWXjpbH8BGEGIixNicDZPBGAeW3Tnn7Df/uYxzyVLVHZJNAM8keyR79t0MIRRpfLwqJFskBxOelnNuKj21SvKW5ADA97ifSx+AuzzPp4cAABcW1Lf3/R8K+pES50SkXtIBtEk+GvRwkpIQQuFINsxxraozIrIiIjWS7/+oR9MBeDBqXqbkvV8AcAPgIzn5DcAVgEvbPzuSXZIDVc1+aekagE4JUNVds2cG+BoCSB6pajWFkDyOAAdWt3mz9YYpGPHiFxX7kX/DbJtxCg3bfIrIXAoAsGf+dgQ9GRZRVbfKfFR1OQUURTFL8sV7v2jApbIuqrozMkgAXr336ykkUrMK4HVkkExSPModAGciUlPVTFUzEakBOI06cjsyylHF/3uZKuNUuhDCNoBzkk/W4i7JJwDnIlJP438ArzgUybLBdecAAAAASUVORK5CYII='); } " type="text/css"?> <overlay id="quickproxyOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript" xmlns="http://www.w3.org/1999/xhtml"><![CDATA[ var quickProxy = { //-- config -- // 以下はFirefox3以上の場合に有効 // [true]:在选项卡中打开选项, false:在对话框中打开选项 optionInTab: true, // falseの時ダイアログを開く遅延 巧く開かないときは遅延を大きくする optionDelay: 800, //-- config -- _init: function(){ try { CustomizableUI.createWidget({ //must run createWidget before windowListener.register because the register function needs the button added first id: 'quickproxy-status', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton'); var props = { id: 'quickproxy-status', align: 'center', removable: 'true', overflows: true, class: "quickproxy-status-off toolbarbutton-1 chromeclass-toolbar-additional", label: "QuickProxy", status: "false", tooltiptext: "快速代理", onclick: "quickProxy._click(event);event.preventDefault();", }; for (var p in props) { toolbaritem.setAttribute(p, props[p]); } return toolbaritem; } }); } catch(ee) {} quickProxy.addPrefListener(quickProxy.buttonPrefListener); // 登録処理 window.addEventListener('unload',function(){ quickProxy.removePrefListener(quickProxy.buttonPrefListener); } ,false); var count = 0, timer = setInterval(function(){if(++count > 50 || (function(){ var icon = document.getElementById("quickproxy-status"); if (!icon) return false; var qp_autooff = quickProxy.getPref('quickproxy.autooff', 'bool', true); var Is_Proxy_On = quickProxy.getPref("network.proxy.type", 'int', 0); if (qp_autooff == true && quickProxy.getNumberOfWindow() == 1){ Is_Proxy_On = 0 } quickProxy.setPref("network.proxy.type", 'int', Is_Proxy_On); quickProxy._updateUI(); return true; })()) clearInterval(timer);},1000); }, getNumberOfWindow: function(){ var mediator = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator); var enumerator = mediator.getEnumerator("navigator:browser"); var num = 0; while(enumerator.hasMoreElements()) { var win = enumerator.getNext(); num++; } return num; }, _switch: function() { var Is_Proxy_On = this.getPref("network.proxy.type", 'int', 0); var Proxy_Type = this.getPref("quickproxy.type", 'int', 1); if (Is_Proxy_On == 0){ Is_Proxy_On = Proxy_Type; }else{ Is_Proxy_On = 0; } this.setPref("network.proxy.type", 'int', Is_Proxy_On); this._updateUI(); }, _click: function(e){ if (e.button == 0){ this._switch(); } if (e.button == 2) { var aURL = "chrome://browser/content/preferences/connection.xul"; if (parseInt(Components.classes["@mozilla.org/xre/app-info;1"] .getService(Components.interfaces.nsIXULAppInfo) .version.substr(0,3) * 10,10) / 10 < 3) { //Fx2 var aName =""; var aFeatures = 'modal,centerscreen,resizable=no'; var aParams = null; openDialog(aURL, aName, aFeatures, aParams); } else { if (this.optionInTab) { //Fx3 タブバージョン (タブが一つの時, 閉じるとFxも閉じてしまう) if ("isBlankPageURL" in window ? isBlankPageURL(gBrowser.currentURI.spec) : gBrowser.currentURI.spec == "about:blank") gBrowser.loadOneTab(aURL); else gBrowser.selectedTab = gBrowser.addTab(aURL); var Proxy_Type = this.getPref("network.proxy.type", 'int', 0); if(Proxy_Type > 0) this.setPref("quickproxy.type", 'int', Proxy_Type); this._updateUI(); e.preventDefault(); setTimeout(function(self){ if (gBrowser.mTabs.length == 1) gBrowser.addTab(); }, 200 , this); return; } else { //Fx3 ダイアログバージョン var prefBack = this.getPref("browser.preferences.instantApply", "bool", false); this.setPref("browser.preferences.instantApply", "bool", true); var w = openPreferences("paneAdvanced", {"advancedTab":"networkTab"}); setTimeout(function(self, w, prefBack){ self.optionOnload(w, prefBack); }, self.optionDelay, this, w, prefBack); var Proxy_Type = this.getPref("network.proxy.type", 'int', 0); if(Proxy_Type > 0) this.setPref("quickproxy.type", 'int', Proxy_Type); this._updateUI(); e.preventDefault(); return; } } } if (e.button == 1) { var qp_autooff = this.getPref('quickproxy.autooff', 'bool', true); var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"] .getService(Components.interfaces.nsIPromptService); var check = {value: qp_autooff}; prompts.alertCheck(window, '配置快速代理', '设置启动火狐时的代理状态 (*^__^*)', "启动Firefox时禁用代理?", check); this.setPref('quickproxy.autooff', 'bool', check.value); } e.preventDefault(); }, optionOnload: function(w, prefBack){alert(2) this.setPref("browser.preferences.instantApply", "bool", prefBack); w.gAdvancedPane.showConnections(); }, _updateUI: function() { var Is_Proxy_On = this.getPref("network.proxy.type", 'int', 0); var icon = document.getElementById("quickproxy-status"); var text1 = ""; switch (Is_Proxy_On) { case 0: case 3: icon.classList.add("quickproxy-status-off"); icon.classList.remove("quickproxy-status-on"); icon.setAttribute("tooltiptext", "代理已禁用 o(︶︿︶)o"); return; case 1: var ip = this.getPref("network.proxy.http", "str", ""); var port = this.getPref("network.proxy.http_port", "int", 0); text1 = "\n" + ip + ":" + port; break; case 2: text1 = "\nAutomatic proxy configuration"; break; case 4: text1 = "\nAuto-detect proxy settings for this network"; break; case 5: text1 = "\nUse system proxy settings"; break; } icon.classList.add("quickproxy-status-on"); icon.classList.remove("quickproxy-status-off"); icon.setAttribute("tooltiptext", "代理已启用 (*^__^*)" + text1); }, getPref: function(aPrefString, aPrefType, aDefault){ var xpPref = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); try{ switch (aPrefType){ case "str": return xpPref.getCharPref(aPrefString).toString(); break; case "int": return xpPref.getIntPref(aPrefString); break; case "bool": default: return xpPref.getBoolPref(aPrefString); break; } }catch(e){ } return aDefault; }, setPref: function(aPrefString, aPrefType, aValue){ var xpPref = Components.classes["@mozilla.org/preferences-service;1"] .getService(Components.interfaces.nsIPrefBranch); try{ switch (aPrefType){ case "str": return xpPref.setCharPref(aPrefString, aValue); break; case "int": aValue = parseInt(aValue); return xpPref.setIntPref(aPrefString, aValue); break; case "bool": default: return xpPref.setBoolPref(aPrefString, aValue); break; } }catch(e){ } return null; }, // 監視を開始する addPrefListener: function(aObserver) { try { var pbi = Components.classes['@mozilla.org/preferences;1'].getService(Components.interfaces.nsIPrefBranch2); pbi.addObserver(aObserver.domain, aObserver, false); } catch(e) {} }, // 監視を終了する removePrefListener: function(aObserver) { try { var pbi = Components.classes['@mozilla.org/preferences;1'].getService(Components.interfaces.nsIPrefBranch2); pbi.removeObserver(aObserver.domain, aObserver); } catch(e) {} }, buttonPrefListener:{ domain : 'network.proxy.type', //"grabScroll.XXX"という名前の設定が変更された場合全てで処理を行う observe : function(aSubject, aTopic, aPrefstring) { if (aTopic == 'nsPref:changed') { // 設定が変更された時の処理 var type = quickProxy.getPref(aPrefstring, 'int', 0); if (type != 0) quickProxy.setPref("quickproxy.type", 'int', type); quickProxy._updateUI(); } } } } quickProxy._init(); ]]></script> </overlay> |