📄 gladder.js
字号:
// var ietab = wNav.document.getElementById("IETab");
// if (ietab) {
// var url = (ietab.url ? ietab.url : ietab.wrappedJSObject.url);
// if (url) {
// const ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
// return ioService.newURI(gIeTabChromeStr + encodeURI(url), null, null);
// }
// }
// }
// } catch(e) {}
// return null;
//};
Gladder.prototype.onTabAdded = function(e) {
if (e.relatedNode == gBrowser.mPanelContainer) gGladder.hookBrowserSetter(e.target);
};
Gladder.prototype.hookBrowserSetter = function(aBrowser) {
try{
if (aBrowser.localName != "browser") aBrowser = aBrowser.getElementsByTagNameNS(kXULNS, "browser")[0];
this.hookProp(aBrowser, "currentURI", function() {
try{
var docShell = this.boxObject.QueryInterface(Components.interfaces.nsIBrowserBoxObject).docShell;
var wNav = docShell.QueryInterface(Components.interfaces.nsIWebNavigation);
if (gGladder._usePHProxy){
var er = gl_isErrorPage(wNav.document.URL);
if (er[0]){
if (gGladder._beforeURI.indexOf(er[1]) == -1){
var u = gGladder._PHProxyManager.openFailed(er[1]);
if (u != er[1]){
gGladder._beforeURI[gGladder._beforeURI.length] = er[1];
gGladder._afterURI[gGladder._afterURI.length] = u;
this.loadURI(u);
}
}
}
}
}catch(e){gl_ddump(e)}
return this.webNavigation.currentURI;
});
}catch(e){gl_ddump(e)}
};
Gladder.prototype.stateChange = function(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus){
var nsIWebProgressListener = Components.interfaces.nsIWebProgressListener;
var nsIChannel = Components.interfaces.nsIChannel;
if (aStateFlags & nsIWebProgressListener.STATE_START){
try{
var url = aRequest.QueryInterface(nsIChannel).URI.spec;
aWebProgress.DOMWindow.gl_url = url;
var index = gGladder._afterURI.indexOf(url);
if (index != -1){
gGladder._beforeURI.splice(index, 1);
gGladder._afterURI.splice(index, 1);
}
var rp = gGladder.filterUrl(url);
if (rp != url){
aRequest.cancel(0x804b0002); //NS_BINDING_ABORTED
aBrowser.loadURI(rp);
// gGladder._beforeURI[gGladder._beforeURI.length] = url;
// gGladder._afterURI[gGladder._afterURI.length] = rp;
}
}catch(e){}
}
};
Gladder.prototype.shouldProxy = function(){
return this._enabled && (!this.usingNetworkProxy() || this._workWithNetworkProxy);
};
Gladder.prototype.filterInput = function(_url){
var url = _url;
if (!/^\w+\:\/\//.test(url)){
url = "http://"+url;
}
if (/^http\:\/\/[^\/]+$/.test(url)){
url += "/";
}
var furl = this.filterUrl(url);
if (url != furl){
return furl;
}
else{
return _url;
}
};
Gladder.prototype.filterUrl = function(url){
if (this.shouldProxy()){
if (this._usePHProxy){
return this.checkUrl2(url);
}
else{
return this.checkUrl(url);
}
}
return url;
};
Gladder.prototype.checkUrl2 = function(url){
var _url = url;
var arr = this.checkAdapters(url, true);
_url = arr[1];
if (arr[0]){
return arr[1];
}
if (this.isSite(gl_parseSite(_url))[0]){
return this._PHProxyManager.proxy(_url);
}
return url;
};
Gladder.prototype.checkUrl = function(url){
var _url = url;
var arr = this.checkAdapters(url);
_url = arr[1];
if (arr[0]){
return arr[1];
}
else if (this.isSite(gl_parseSite(_url))[0] && this._defaultAda !== null){
this._defaultAda.process(_url, function(rp){url = rp});
}
return url;
};
Gladder.prototype.checkAdapters = function(url, noType){
var modified = false;
for (var j = 0; j < this._adapters.length; j += 1) {
var ada = this._adapters[j];
if (noType && ada._type != 0){
continue;
}
if (ada.process(url, function(rp){url = rp;})){
if (!ada._premodify)
modified = true;
}
}
return [modified, url];
};
Gladder.prototype.getCurrentUrl = function(){
if(typeof(content.gl_url) == "undefined" || content.gl_url == null){
content.gl_url = content.document.URL;
}
return gl_isErrorPage(content.gl_url)[1];
};
Gladder.prototype.usingNetworkProxy = function(){
return this._pref.getIntPref("network.proxy.type") > 0;
};
Gladder.prototype.adapt = function (doc) {
var allLinks = doc.links;
for (var j = 0; j < this._adapters.length; j += 1) {
var ada = this._adapters[j];
for (var i = 0; i < allLinks.length; i += 1) {
ada.process(allLinks[i].href, callback);
}
}
function callback(url){
allLinks[i].href = url;
var title = allLinks[i].getAttribute("title");
if (title) {
title += " (" + gGladder.getString(gGladder._nameStringTooltipTrack) + ")";
} else {
title = gGladder.getString(gGladder._nameStringTooltipTrack);
}
allLinks[i].setAttribute("title", title);
}
};
Gladder.prototype.redirect = function (url, wnd) {
var modified = false;
for (var j = 0; j < this._adapters.length; j += 1) {
var ada = this._adapters[j];
if (ada.process(url, function(rp){url = rp;})){
modified = true;
}
}
if (modified){
try{
wnd.location.replace(url);
}
catch(e){};
}
return modified;
};
Gladder.prototype.keepCheckingProxy = function(){
gGladder.updateStatus();
setTimeout(gGladder.keepCheckingProxy, 100);
};
Gladder.prototype.proxyed = function(){
var url = this.getCurrentUrl();
return gl_parseSite(url) != this.getCurrentSite();
};
Gladder.prototype.unproxyThis = function(){
if (this.isSite()[0]){
this.enable(false);
}
content.location = this.getOriginalUrl(this.getCurrentUrl());
};
Gladder.prototype.proxyThis = function(){
if (this._usePHProxy){
content.location = this._PHProxyManager.proxy(gl_isErrorPage(content.document.URL)[1]);
}
else if (this._defaultAda !== null){
this._defaultAda.process(gl_isErrorPage(content.document.URL)[1], function(rp){content.location = rp});
}
};
Gladder.prototype.defaultAda = function (url, wnd){
if (this._defaultAda !== null){
this._defaultAda.process(url, function(url){
try{
wnd.location.replace(url);
}catch(e){}
});
}
};
Gladder.prototype.getString = function (name) {
if (!this._stringBundle) {
this._stringBundle = document.getElementById("gladderstrings");
}
return this._stringBundle.getString(name);
};
Gladder.prototype.selectProxy = function(name){
var cus=(name==this.NAME_ADA_CUSTOM);
document.getElementById('proxyurl').disabled = !cus;
document.getElementById('proxytype').disabled = !cus;
if (!cus && this._pref.getCharPref(this._namePrefProxyUrl) == 0){
var ada = this.findAda(name);
if (ada != null){
document.getElementById('proxyurl').value = ada._dst;
document.getElementById('proxytype').selectedItem = document.getElementById('type'+(ada._type==1?"01":ada._type));
}
}
};
Gladder.prototype.clickUsePHProxy = function(checked){
document.getElementById('defaultadalist').disabled=checked;
var cus=(document.getElementById('defaultadalist').value==this.NAME_ADA_CUSTOM);
document.getElementById('proxyurl').disabled = !cus || checked;
document.getElementById('proxytype').disabled = !cus || checked;
};
Gladder.prototype.initOptions = function(){
this.loadPref();
document.getElementById("autoredirect").checked = this._enabled;
document.getElementById("workwithnetworkproxy").checked = this._workWithNetworkProxy;
document.getElementById("usephproxy").checked = this._usePHProxy;
document.getElementById("unproxy").checked = this._unproxy;
document.getElementById("sites").setAttribute("value", this._pref.getCharPref(this._namePrefSites));
document.getElementById("adapters").setAttribute("value", this._pref.getCharPref(this._namePrefAdapters));
document.getElementById("proxyurl").setAttribute("value", this._pref.getCharPref(this._namePrefProxyUrl));
document.getElementById("proxytype").selectedItem = document.getElementById('type'+this._pref.getCharPref(this._namePrefProxyType));
var menu = document.getElementById('defaultadalist');
var popup = document.getElementById('defaultadalistpopup');
if (this._defaultAdaList.length > 0){
var cus = popup.firstChild;
for(var i=0; i<this._defaultAdaList.length; i++){
var name = this._defaultAdaList[i]._name;
var item = document.createElement('menuitem');
item.setAttribute("value", name);
item.setAttribute("label", name);
item.setAttribute("id", name);
popup.insertBefore(item, cus);
if (this._defaultAda._name == name){
menu.selectedIndex = i;
this.selectProxy(name);
}
}
}
else{
menu.setAttribute("disabled", true);
}
this.clickUsePHProxy(this._usePHProxy);
};
Gladder.prototype.saveOptions = function(){
this._pref.setCharPref(this._namePrefSites, document.getElementById("sites").value);
this._pref.setBoolPref(this._namePrefEnabled, document.getElementById("autoredirect").checked);
this._pref.setBoolPref(this._namePrefUnproxy, document.getElementById("unproxy").checked);
this._pref.setBoolPref(this._namePrefWorkWithNetworkProxy, document.getElementById("workwithnetworkproxy").checked);
this._pref.setBoolPref(this._namePrefUsePHProxy, document.getElementById("usephproxy").checked);
var ada = document.getElementById('defaultadalist').value;
this._pref.setCharPref(this._namePrefDefaultAdapterName, ada);
if (ada == this.NAME_ADA_CUSTOM){
this._pref.setCharPref(this._namePrefProxyUrl, document.getElementById("proxyurl").value);
this._pref.setCharPref(this._namePrefProxyType, document.getElementById("proxytype").value);
}
this.notify();
};
Gladder.prototype.doLoad = function () {
gGladder.keepCheckingProxy();
gGladder.loadPref();
gGladder.update();
document.getElementById("contentAreaContextMenu").addEventListener("popupshowing", gGladder.contextMenuPopup, false);
// try {
// netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
// } catch (anError) {
// dump("ERROR: " + anError +"\n");
// }
gGladder.hookCodeAll();
};
Gladder.prototype.showText = function (str) {
alert(str);
};
Gladder.prototype.doDOMContentLoaded = function (event) {
if (gGladder._enabled && gGladder._unproxy){
var doc = content.document;
if (event.originalTarget instanceof HTMLDocument) {
doc = event.originalTarget;
}
if (gGladder.isOnProxy(doc.location.href)){
gGladder.recoverLinks(doc);
}
}
};
Gladder.prototype.recoverLinks = function (doc) {
var allLinks = doc.links;
if (gGladder._usePHProxy){
var proxy = gGladder._PHProxyManager.findProxy(doc.location.href);
}
for (var i = 0; i < allLinks.length; i += 1) {
if (allLinks[i].href.indexOf(doc.location.href) == 0)
continue;
try{
allLinks[i].href=proxy?proxy.unproxy(allLinks[i].href):gGladder.getOriginalUrl(allLinks[i].href);
}
catch(e){gl_ddump();}
}
};
Gladder.prototype.update = function () {
setTimeout(function () {
gGladder.update();
}, this._timeout);
var update = this._pref.getCharPref(this._namePrefUpdateURL);
var list = update.split("\n");
if (this._updateIndex >= list.length) {
this._updateIndex = 0;
return;
}
try {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", list[this._updateIndex], true);
xmlhttp.onreadystatechange = function () {
try {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
gGladder.processUpdate(xmlhttp.responseText);
} else {
gGladder._updateIndex += 1;
gGladder.update();
}
}
}
catch (e) {
gGladder._updateIndex += 1;
gGladder.update();
return;
}
};
xmlhttp.setRequestHeader("Cache-Control", "no-cache");
xmlhttp.setRequestHeader("If-Modified-Since", "Sat, 29 Oct 1994 19:43:31 GMT");
xmlhttp.send(null);
}
catch (e) {
return;
}
};
Gladder.prototype.processUpdate = function (response) {
if (response.length > 0 && response.indexOf('Config File for Gladder') != -1) {
this.loadAdapters(response);
var str = this._adapters.join("\n\n");
for (var i=0; i<this._defaultAdaList.length; i++){
str += "\n\n"+this._defaultAdaList[i].toString();
}
this._pref.setCharPref(this._namePrefAdapters, str);
var dlg = windowMediator.getMostRecentWindow("gladder:settings");
if (dlg){
dlg.document.getElementById('adapters').setAttribute('value', this._pref.getCharPref(this._namePrefAdapters));
}
this.notify();
}
};
Gladder.prototype.loadPref = function(){
this._timeout = this._pref.getIntPref(this._namePrefUpdateTimeout);
this._enabled = this._pref.getBoolPref(this._namePrefEnabled);
this._unproxy = this._pref.getBoolPref(this._namePrefUnproxy);
this._workWithNetworkProxy = this._pref.getBoolPref(this._namePrefWorkWithNetworkProxy);
this._usePHProxy = this._pref.getBoolPref(this._namePrefUsePHProxy);
this.loadAdapters(this._pref.getCharPref(this._namePrefAdapters));
this.loadSites(this._pref.getCharPref(this._namePrefSites));
if (this._pref.getBoolPref("gladder.add.wikipedia")){
var str = "wikipedia.org\nwikibooks.org\nwiktionary.org\nwikiquote.org\nwikisource.org\nwikinews.org";
var wiki = str.split("\n");
for(var index=0; index<wiki.length; index++) {
if (this._sites.indexOf(wiki[index]) ==-1){
this._sites[this._sites.length] = wiki[index];
} }
this._pref.setCharPref(this._namePrefSites, this._sites.join("\n"));
this._pref.setBoolPref("gladder.add.wikipedia", false);
}
this.updateStatus();
};
Gladder.prototype.findAda = function(name){
var ada = this.searchAda(name)
if (ada)
return ada;
if (this._defaultAdaList.length > 0)
return this._defaultAdaList[0];
else
return null;
};
Gladder.prototype.searchAda = function(name){
for (var i=0; i<this._defaultAdaList.length; i++){
if (this._defaultAdaList[i]._name == name)
return this._defaultAdaList[i];
}
return null;
};
Gladder.prototype.testAdapters = function () {
return;
if (this._timerTestAda) {
clearTimeout(this._timerTestAda);
this._timerTestAda = null;
}
//retest ever 5 minutes
this._timerTestAda = setTimeout(function(){gGladder.testAdapters();}, 300000);
for(var index=0; index<this._defaultAdaList.length; index++) {
if (!this._defaultAdaList[index]._s && this._defaultAdaList[index]._e < 10){
this.testAda(this._defaultAdaList[index]._name, this._defaultAdaList[index].processUrl("http://www.yahoo.com"));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -