⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gladder.js

📁 南开火狐
💻 JS
📖 第 1 页 / 共 3 页
字号:
//         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 + -