//复制一条host规则
function copyRule(div){
var d = div.cloneNode(true);
var ar = gvar.arr;
ar.push(ar[d.getAttribute("idx")]);
d.setAttribute("idx",ar.length-1);
d.style.border = "1px solid #B3C1D2";
ns.divMain.appendChild(d);
d.onmouseover=function(){this.style.border = "1px solid #97A7BB";};
d.onmouseout =function(){this.style.border = "1px solid #B3C1D2";};
save();
event.returnValue = false;
return false;
}
//删除一条host规则
function delHostRule(div){
if(!confirm("确定要删除吗?")) return false;
var idx = parseInt(div.getAttribute("idx"),10);
gvar.arr[idx] = "";
ns.divMain.removeChild(div);
saveHostsFile();
event.returnValue = false;
return false;
}
//在新窗口中打开域名地址
function openDomain(div){
var url = "http://"+div.getElementsByTagName("input")[2].value;
if(ns.chkCache.checked == true) clearCache();
if(ns.chkComment.checked==true){
var val = div.getElementsByTagName("input")[3].value;
url += (val.charAt(0) == "/" ? val : "/" + val);
}
window.open(url,(Math.random()+"").replace(/^0\./,"win"));
event.returnValue = false;
return false;
}
//读取host文件
function readFile(){
gvar.text = read();
gvar.arr = gvar.text.split(/\n/);
}
function read(){
if (!gvar.fso.FileExists(gvar.hostpath)){
alert(gvar.hostpath+"文件不存在.\n请选择要编辑的hosts文件!");
gvar.hostpath = "";
ns.fPath.click();
}
if(gvar.hostpath == ""){ alert("您没有选择任何Hosts文件"); return ""; }
var file = gvar.fso.GetFile(gvar.hostpath);
var ts = gvar.fso.OpenTextFile(gvar.hostpath, 1);
var text = (file.Size>0?ts.ReadAll():"").replace(/ /g," ").replace(/\r(\n)/g,"$1").replace(/\r/g,"\n");
ts.close();
return text;
}
function addStyle(ref){
ref.onmouseover = function (){ this.style.color = "#FF2A00"; this.style.backgroundColor = "#bbcada"};
ref.onmouseout = function (){ this.style.color = "#3E3E3E"; this.style.backgroundColor = "#B3C1D2"};
}
//在可视化编辑和手动编辑之间切换函数
function show(btn){
var f = {
"View":function(b){ns.divContent.style.display = "block"; ns.taContent.value = read(); b.value = "Edit"; ns.btnSave.style.display = "";},
"Edit":function(b){ns.divContent.style.display = "none"; b.value = "View"; ns.btnSave.style.display = "none"; if(gvar.isEverSaved) window.location.reload();}
};
f[btn.value](btn);
}
//为DOM元素注册事件
function addEvtListener(){
ns.fPath.onchange = function(){gvar.hostpath = this.value;};
addStyle(ns.btnShowView);
addStyle(ns.btnClose);
addStyle(ns.btnClearCache);
ns.btnClose.onclick = function(){window.opener=null; window.close();};
ns.btnClearCache.onclick = clearCache;
ns.btnShowView.onclick = function(){ show(this); };
ns.btnSave.onclick = function (){ wrFile(ns.taContent.value);gvar.isEverSaved=true;};
ns.spIP.onclick=function(){sort(gvar.divRules,funcond ,1)};
ns.spDomain.onclick=function(){sort(gvar.divRules,funcond ,2)};
}
//遍历缓存文件夹,清除缓存函数
function clearCache(){
traverse(gvar.cachepath,function(f){return /^[\s\S]+\.js$/.test(f.Name);},function(f){try{gvar.fso.DeleteFile(f.Path);}catch(e){} });
}
function traverse(path,cond,exe){
var fso = gvar.fso;
if (!fso.FolderExists(path)){
alert("浏览器缓存文件夹不存在!\n" + path);
return;
}
var f = fso.GetFolder(path);
traverseFolder(f,cond,exe);
}
function traverseFolder(folder,cond,exe){
var fc = new Enumerator(folder.SubFolders);
for (;!fc.atEnd(); fc.moveNext())
traverseFolder(fc.item(),cond,exe);
fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext())
if(cond(fc.item())) exe(fc.item());
}
//初始化
function init(){
getElementRef();
initGvar();
initwindow();
if (!gvar.fso.FileExists(gvar.hostpath) || !gvar.fso.FolderExists(gvar.cachepath)){
help();
alert("您还没有配置本软件的参数,或者配置参数不正确.\n请查看帮助文档的\"如何配置该软件\"部分!");
return;
}
addEvtListener();
readFile();
initDom();
//sort(gvar.divRules,funcond ,2);
}
//排序函数
function sort(els,fc,flag){
var l = els.length;
for(var i=0;i<l-1;i++){
for(var j=i+1;j<l;j++){
if(fc(els[i],els[j],flag)>0){
swap(els[i],els[j]);
var t = els[i];
els[i]=els[j];
els[j]=t;
}
}
}
}
function compare(x,y,f){
if(f==1){//IP
c = x.replace(/(^|\D)(\d)(?=(\D|$))/g,"$1"+"00$2").replace(/(^|\D)(\d\d)(?=(\D|$))/g,"$1"+"0$2");
d = y.replace(/(^|\D)(\d)(?=(\D|$))/g,"$1"+"00$2").replace(/(^|\D)(\d\d)(?=(\D|$))/g,"$1"+"0$2");
return (c>d?1:(c<d?-1:0));
}else if(f==2){//domain
return (x>y?1:(x<y?-1:0));
}else{//error
return "error";
}
}
function swap(a,b){
a.swapNode(b);
}
function funcond(a,b,f){
return compare(a.getElementsByTagName("input")[f].value,b.getElementsByTagName("input")[f].value,f);
}function free(){}window.onload=init;
window.onbeforeunload = free;
window.onhelp = function help(){
if(ns.divHelp.style.display == "block"){
ns.divHelp.style.display = "none";
ns.divMain.style.display = "block";
}
else{
ns.divHelp.style.display = "block";
ns.divMain.style.display = "none";
}
}
//未完成功能:
// 实现升序降序交替排序
// 手动编辑的textarea 加上行号
// 操作成功失败提示
// 清缓存功能扩展: 支持删除其它后缀名的缓存
// 备份功能
// 释放内存
//-->
</script>
function copyRule(div){
var d = div.cloneNode(true);
var ar = gvar.arr;
ar.push(ar[d.getAttribute("idx")]);
d.setAttribute("idx",ar.length-1);
d.style.border = "1px solid #B3C1D2";
ns.divMain.appendChild(d);
d.onmouseover=function(){this.style.border = "1px solid #97A7BB";};
d.onmouseout =function(){this.style.border = "1px solid #B3C1D2";};
save();
event.returnValue = false;
return false;
}
//删除一条host规则
function delHostRule(div){
if(!confirm("确定要删除吗?")) return false;
var idx = parseInt(div.getAttribute("idx"),10);
gvar.arr[idx] = "";
ns.divMain.removeChild(div);
saveHostsFile();
event.returnValue = false;
return false;
}
//在新窗口中打开域名地址
function openDomain(div){
var url = "http://"+div.getElementsByTagName("input")[2].value;
if(ns.chkCache.checked == true) clearCache();
if(ns.chkComment.checked==true){
var val = div.getElementsByTagName("input")[3].value;
url += (val.charAt(0) == "/" ? val : "/" + val);
}
window.open(url,(Math.random()+"").replace(/^0\./,"win"));
event.returnValue = false;
return false;
}
//读取host文件
function readFile(){
gvar.text = read();
gvar.arr = gvar.text.split(/\n/);
}
function read(){
if (!gvar.fso.FileExists(gvar.hostpath)){
alert(gvar.hostpath+"文件不存在.\n请选择要编辑的hosts文件!");
gvar.hostpath = "";
ns.fPath.click();
}
if(gvar.hostpath == ""){ alert("您没有选择任何Hosts文件"); return ""; }
var file = gvar.fso.GetFile(gvar.hostpath);
var ts = gvar.fso.OpenTextFile(gvar.hostpath, 1);
var text = (file.Size>0?ts.ReadAll():"").replace(/ /g," ").replace(/\r(\n)/g,"$1").replace(/\r/g,"\n");
ts.close();
return text;
}
function addStyle(ref){
ref.onmouseover = function (){ this.style.color = "#FF2A00"; this.style.backgroundColor = "#bbcada"};
ref.onmouseout = function (){ this.style.color = "#3E3E3E"; this.style.backgroundColor = "#B3C1D2"};
}
//在可视化编辑和手动编辑之间切换函数
function show(btn){
var f = {
"View":function(b){ns.divContent.style.display = "block"; ns.taContent.value = read(); b.value = "Edit"; ns.btnSave.style.display = "";},
"Edit":function(b){ns.divContent.style.display = "none"; b.value = "View"; ns.btnSave.style.display = "none"; if(gvar.isEverSaved) window.location.reload();}
};
f[btn.value](btn);
}
//为DOM元素注册事件
function addEvtListener(){
ns.fPath.onchange = function(){gvar.hostpath = this.value;};
addStyle(ns.btnShowView);
addStyle(ns.btnClose);
addStyle(ns.btnClearCache);
ns.btnClose.onclick = function(){window.opener=null; window.close();};
ns.btnClearCache.onclick = clearCache;
ns.btnShowView.onclick = function(){ show(this); };
ns.btnSave.onclick = function (){ wrFile(ns.taContent.value);gvar.isEverSaved=true;};
ns.spIP.onclick=function(){sort(gvar.divRules,funcond ,1)};
ns.spDomain.onclick=function(){sort(gvar.divRules,funcond ,2)};
}
//遍历缓存文件夹,清除缓存函数
function clearCache(){
traverse(gvar.cachepath,function(f){return /^[\s\S]+\.js$/.test(f.Name);},function(f){try{gvar.fso.DeleteFile(f.Path);}catch(e){} });
}
function traverse(path,cond,exe){
var fso = gvar.fso;
if (!fso.FolderExists(path)){
alert("浏览器缓存文件夹不存在!\n" + path);
return;
}
var f = fso.GetFolder(path);
traverseFolder(f,cond,exe);
}
function traverseFolder(folder,cond,exe){
var fc = new Enumerator(folder.SubFolders);
for (;!fc.atEnd(); fc.moveNext())
traverseFolder(fc.item(),cond,exe);
fc = new Enumerator(folder.files);
for (; !fc.atEnd(); fc.moveNext())
if(cond(fc.item())) exe(fc.item());
}
//初始化
function init(){
getElementRef();
initGvar();
initwindow();
if (!gvar.fso.FileExists(gvar.hostpath) || !gvar.fso.FolderExists(gvar.cachepath)){
help();
alert("您还没有配置本软件的参数,或者配置参数不正确.\n请查看帮助文档的\"如何配置该软件\"部分!");
return;
}
addEvtListener();
readFile();
initDom();
//sort(gvar.divRules,funcond ,2);
}
//排序函数
function sort(els,fc,flag){
var l = els.length;
for(var i=0;i<l-1;i++){
for(var j=i+1;j<l;j++){
if(fc(els[i],els[j],flag)>0){
swap(els[i],els[j]);
var t = els[i];
els[i]=els[j];
els[j]=t;
}
}
}
}
function compare(x,y,f){
if(f==1){//IP
c = x.replace(/(^|\D)(\d)(?=(\D|$))/g,"$1"+"00$2").replace(/(^|\D)(\d\d)(?=(\D|$))/g,"$1"+"0$2");
d = y.replace(/(^|\D)(\d)(?=(\D|$))/g,"$1"+"00$2").replace(/(^|\D)(\d\d)(?=(\D|$))/g,"$1"+"0$2");
return (c>d?1:(c<d?-1:0));
}else if(f==2){//domain
return (x>y?1:(x<y?-1:0));
}else{//error
return "error";
}
}
function swap(a,b){
a.swapNode(b);
}
function funcond(a,b,f){
return compare(a.getElementsByTagName("input")[f].value,b.getElementsByTagName("input")[f].value,f);
}function free(){}window.onload=init;
window.onbeforeunload = free;
window.onhelp = function help(){
if(ns.divHelp.style.display == "block"){
ns.divHelp.style.display = "none";
ns.divMain.style.display = "block";
}
else{
ns.divHelp.style.display = "block";
ns.divMain.style.display = "none";
}
}
//未完成功能:
// 实现升序降序交替排序
// 手动编辑的textarea 加上行号
// 操作成功失败提示
// 清缓存功能扩展: 支持删除其它后缀名的缓存
// 备份功能
// 释放内存
//-->
</script>
解决方案 »
- window.open()方法问题
- IE7里面iframe为何会被select控件挡住?
- 免费的Javascript日期输入及选择控件大杂烩!
- 网页title动态问题?新手求救,在线等!
- 刚刚 弄这个javascript 谁弄看看我的代码 有什么问题么,感觉这种语言也没有调试工具,看不出来什么错误哦
- 怎么判断我的myform里是不是有名称叫TXT的输入框控件?
- 一个textRange的问题,请大家帮帮忙,代码很短,但实在找不到哪里错了,
- 请教!!!
- 求救:如何获得客户端的屏幕分辨率
- 如何实现进度条!
- 怎么能让鼠标放到tabbar的tab上就显示该tab的信息?
- javascript填充HTML出问题了 ,请会的帮助解决一下,谢谢
<div id="divMain">
<div id="divHead"><span class="sp1">#</span><span id="spIP" title="按IP排序" class="sp2">IP</span><span id="spDomain" title="按域名排序" class="sp3">domain</span><span class="sp4">comment</span></div>
<div id="divContent"><textarea id="taContent"></textarea></div>
</div>
<hr class="split">
<div id="divBottom">
<span class="left">
<span title="打开链接时清除缓存"><input type="checkbox" id="chkCache" hidefocus="true">自动清除缓存</span>
<span class="fgf">|</span>
<span title="将域名和注释连接成完整地址"><input type="checkbox" id="chkComment" checked="true" hidefocus="true">连接域名注释</span>
</span>
<span class="right">
<button hidefocus="true" id="btnClearCache" title="清除缓存中的js文件">Cache</button>
<button hidefocus="true" id="btnSave" title="保存Hosts文件" style="display:none">Save</button>
<button hidefocus="true" id="btnShowView" title="查看Hosts文件">View</button>
<button hidefocus="true" id="btnClose" title="关闭窗口">Close</button>
<a href="mailto:[email protected]" title="Report BUG" title="报告bug">Bug</a></span>
</div>
<input type="file" id="fPath">
<a href="#" onclick="help()" id="lnkHelp">帮助</a>
<div id="divHelp">
<pre>
作 者 : 梅雪香
版 本 : 1.0
日 期 : 2007-9-18
Email : <a href="mailto:[email protected]" title="Report BUG" title="报告bug">[email protected]</a>
<hr>
<p align="center" style="color:red">按下 <b>F1</b> 可以关闭/打开该帮助文档</p>
<b>软件功能:</b>
1.修改本机host文件.
2.删除本机浏览器的指定类型缓存文件(目前只删除.js文件).
3.打开域名页面.
<b>谁可以使用该软件:</b>
如果你需要经常的修改host文件,删除某些缓存文件,浏览各种环境下的同一域名地址,那么本软件可以帮到您.
<b>如何配置该软件:</b>
本程序无法自动搜索您本机的host文件地址和缓存文件夹,需要您手动配置.
<b>修改host文件路径:</b>
用文本编辑器(如:记事本,editplus,ultraedit等)打开本程序hosteditor.hta,找到
gvar.hostpath = "c:\\windows\\system32\\drivers\\etc\\hosts";
如上语句,将您本机的host文件地址替换到双引号中,注意使用"\\"来分隔各文件夹名.
<b>修改缓存文件路径:</b>
与修改host类似,对应的语句为:
gvar.cachepath= "C:\\Documents and Settings\\meixx\\Local Settings\\Temporary Internet Files"
<b>如何使用该软件:</b>
如果你已经正确配置了该软件所需要的两个地址,那么你可以开始使用本软件了.
软件打开的界面会显示出host文件中生效的和被注释掉的所有host规则.在本界面进行的操作不需要手动保存,程序会自动保存.
<b>使某条规则生效:</b>
取消该条规则前边复选框的选中状态.
<b>修改IP地址,域名:</b>
在对应的文本框中进行修改.
<b>添加或修改注释:</b>
在注释文本框中添加内容,不需要加#号.在host文件中,该注释会显示在本条规则同一行的后部.
<b>添加一条新规则:</b>
本软件并没有添加新规则的按钮,您可以通过点击已有规则后边的 "C" 链接来复制一条当前规则,
并在此基础上修改来达到添加的目的.
当host文件中没有任何规则的时候,需要手动在此文件添加至少一条规则,然后才能使用复制功能.
您可以用其它编辑器添加一条规则,也可以用本软件的手动编辑功能来添加一条规则,添加方法见后面介绍.
<b>删除一条规则:</b>
点击规则后边的 "X"链接,并选择弹出框中的确定,可以删除当前规则.
<b>打开域名对应的地址:</b>
点击规则后边的 "O"链接,可以打开当前域名对应的http协议地址.
如果选中了"连接域名注释"复选框,则会把注释的内容当做路径添加到URL后边.
如果选中了"自动清除缓存"复选框,程序会自动清除浏览器缓存中的指定后缀名的文件(暂时只删除.js文件).
<b>清除缓存:</b>
页面右下方的cache按钮用来清除浏览器缓存中的指定后缀名的文件(暂时只删除.js文件).
本操作可能耗时较长.时间取决于缓存文件的数量.
<b>手工编辑host文件:</b>
点击页面右下方的View按钮,程序会显示出host文件当前的内容,你可以手动编辑此内容,并通过点击Save按钮保存您的修改,
或者点击Edit按钮回到编辑页面并放弃修改.
<b>关闭窗口:</b>
页面右下方的close按钮可以用来关闭窗口.也可以点击右上角的X(关闭)按钮,或者在任务栏用右键关闭,或者按Alt+F4键.
<b>辅助功能:</b>
默认情况下,编辑页面不对规则进行任何排序,您可以通过点击页面上方的文字"IP"将规则按IP由小到大的顺序排列.
或者点击domain将规则按域名由小到大的顺序排列.
</pre>
</div>
</body>
</html>
其它参见代码后边的简单的帮助文档. 有任何建议或者意见,或者有什么不明白的请在此回贴.
顶+学习
来看看
顺便接分
顺便祝大家和自己长假快乐!
本软件并没有添加新规则的按钮,您可以通过点击已有规则后边的 "C" 链接来复制一条当前规则,
并在此基础上修改来达到添加的目的.
当host文件中没有任何规则的时候,需要手动在此文件添加至少一条规则,然后才能使用复制功能.
您可以用其它编辑器添加一条规则,也可以用本软件的手动编辑功能来添加一条规则,添加方法见后面介绍.
---------------------------------------------
XPaint:专业的WEB图象处理(http://www.crossgo.com)
34
等 级:
发表于:2007-09-29 12:40:2132楼 得分:0
牛人,真的厉害,不过也只有做成hta格式才能实现这些吗?
=================貌似||会被替换================
htm也是可以的,不过会有安全提示!
只有梅雪香GG,在南山
在这里提供了下载地址.