userChrome でプロキシ設定きりかえ
FoxyProxy を(たいして機能をつかっていないのに、複数プロキシをきりかえたいというだけで) つかっていたのだけれど、やめた。
普通にステータスバーから切り替えさえできればいいので (なんか FoxyProxy だとこれができないのだ。設定画面が Cmd-W で閉じれないし)、userChrome で prefs をいぢるようにした。
(function () {
const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
var proxySetting = [
function Disable () {
prefs.setIntPref("network.proxy.type", 0);
},
function LocalSocks () {
prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.socks", "localhost");
prefs.setIntPref("network.proxy.socks_port", 10080);
},
function School () {
prefs.setIntPref("network.proxy.type", 1);
prefs.setCharPref("network.proxy.http", "");
prefs.setIntPref("network.proxy.http_port", 8081);
},
];
const ID = "status-bar-proxy-uc";
var statusbar = document.getElementById("status-bar");
var panel = document.createElementNS(kXULNS, "statusbarpanel");
var iconimg = <><![CDATA[
data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAACzGlDQ1BJQ0Mg
UHJvZmlsZQAAeJx9kEtoE1EUhr87WgRpFTRWKQp3VbNoy9C6qC6Upta0VmIY
U/tAkHRyk4ydTMY7k/jAhQjiRrC6FDc+cCUupQsXLoQuRAqKuhHBpVhBENyI
xMUkzUirFwa+Oefe/5z/h45k3vddQ0LFC7WVTsmZ2Tm55Q0ddNEJkLcDfySb
PQGQ932XdefnewTA2/6N+/89XXpmdg6EBBKliA8AifmIx4HEhdAPQZwBEnY5
XwDhA306Z42CuAdsK8V4PsYFFdggngBHbF+HYOSA8bpdCkGsAqZXcDww9gLD
hcCugHEPjJszs3MyWjOchMP7YNOrdm0ugCePYXdvu5bcA7umYWmoXfthIQDR
vRIUhwYBEJ0p6PjUaPzohS134PftRuPXg0bj90PY9BFeuHZN15sZCfEaIh8A
JNLKU9qxpZVOyayuFh1XxSLduB35jfRgyWrRvzjKBIBhuD8O01th8jrc/Qz7
n8LOZ5DtgtxBjKu0vlBdDAFGq/4l7ZTKoRw0zUHZLwdNc0iO+L6r5Gi14tdC
peWEZw/0ybzrSu2UymEgtQqUrqvCABW31vK7HehU3tQpoBeMogrGmizOFfJH
J4EBEG8K6ugY0AdisegcmwCSwMuiPjYVsdjhhBO5iI3Dnps50WS8auZkpMmq
H6asln5QPzXWqp/LH88CPSAOLVQnLaAbjOTlcm46YpG7XB7NNPk5s7goHDwU
HhKLNCn68dFUKeLg4OKQRuGh0DgELGx40yUbY0maL3h8QeNwnhoKicVpUhmu
9a0pSPOD+c18Z943H5lfF3tqyXbnmj7r2Cu3vpNFodd0m93mTpG+TZURXFxK
KCprnoLYprHtit5iT1vJXrn1Xd3I/Iy5VLFJ/cyjCFhA41BH4RKgGIlN+1d6
Cnf5yvM97VnvNi+dedu5fOWvrKrrXKk1V3//t+/F36s/zbABaFPXSTsAAAB3
SURBVCjPrZFBFcAgDEO/DR4WcFYR4IT78ICNyekuMKCD28KF14Y0pPAnAkJC
CLumo6AoSiaScbZ9oygV3yp+pfTXfqr5eXYXt54apBGSIUi/xINCsgrWg1gP
6y/qnMf1UpRMIqOUXQ7j3N+oZpVi22MX8bSLIx4U5UEkYy3cDgAAAABJRU5E
rkJggg==
]]></>.replace(/¥s/g, "");
var img = document.createElementNS(kXULNS, "image");
img.setAttribute("src", iconimg);
var menu = document.createElementNS(kXULNS, "menupopup");
var sett = document.createElementNS(kXULNS, "menuitem");
sett.setAttribute("disabled", "true");
menu.appendChild(sett);
proxySetting.forEach(function (f) {
var mi = document.createElementNS(kXULNS, "menuitem");
mi.setAttribute("label", f.name);
var command = function (e) {
if (menu.hidePopup) menu.hidePopup();
sett.setAttribute("label", "Cur: "+f.name);
// reset
["http", "ssl", "ftp", "gopher"].forEach(function (p) {
prefs.setCharPref("network.proxy."+p, "");
prefs.setIntPref("network.proxy."+p+"_port", 0);
});
f();
};
if (!arguments.callee.called) { command(); arguments.callee.called = true }
mi.addEventListener("command", command, false);
menu.appendChild(mi);
});
panel.appendChild(img);
panel.appendChild(menu);
panel.setAttribute("tooltiptext", "Change proxies");
panel.addEventListener("click", function (e) {
menu.showPopup(panel, -1, -1, "popup", "bottomleft", "topleft");
}, false);
var t = document.getElementById(ID)
if (t) t.parentNode.removeChild(t);
panel.id = ID;
statusbar.appendChild(panel);
})();インストールしていたアドオンが一個へった。
http://lab.lowreal.net/trac/browser/c/userChrome/proxy.uc.js