作者:马健
邮箱:stronghorse@tom.com主页:stronghorse@tom.com。
[url=]四、从E书或网页中获取链接进来的js文件[/url]
JavaScript没有提供获取js文件内容的接口,因此首先要对注册表进行改造:运行regedit,定位到HKEY_CLASSES_ROOT\.js,在它下面增加两个字符串类型的值:
Content Type=application/x-javascript
PerceivedType=text
如果修改的时候不放心,可以参考HKEY_CLASSES_ROOT\.css的缺省设置,它们只是Content Type的值不同。注册表改造是一次性的工作,改完就不用再动。
在改造完成后,用CtrlN抓取js文件的步骤与前述一般步骤相同,在步骤4中,将下面内容复制、粘贴到地址栏上,然后按回车键即可看到内容:
javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.scripts;for(i=0;i<c.length;i++){o=c[i];if (o.src=='')continue;str+='<a href="';str+=o.src;str+='">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);
这段代码自动对网页进行检查,如果网页中嵌入了js文件,则自动显示出js文件的下载链接,否则显示一个空页或无反应。在链接上点鼠标右键再选“目标另存为”菜单,或直接点链接;即可将文件保存到硬盘上。如果不能保存,请先确认是否已经按照上面说的方法对注册表进行过设置;如果还不行,可以将js文件的URL复制到地址栏上,然后按回车试试。
比较怪异的是用eBook Workshop做的E书(页面URL以ada99:开头),在地址栏上敲入js文件的URL然后回车,会直接显示出js文件内容及其执行结果,需要点“查看->源文件”菜单才可以获得原始js文件代码。不过这种书一般都用unEbookWorkshop反编译了吧?
[url=]六、从E书或网页中获取背景音乐文件[/url]
背景音乐文件可以象Flash一样直接下载,因此在前述一般步骤的步骤4中,将下面内容复制、粘贴到地址栏上,然后按回车键即可看到内容:
javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName!="BGSOUND")continue;str+='<a href="';str+=o.src;str+='">';str+=o.src;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);
这段代码自动对网页进行检查,如果嵌入了背景音乐,则自动显示出背景音乐的下载链接,否则显示一个空页或无反应。在链接上点鼠标右键,选“目标另存为”,即可将文件保存到硬盘上。
注意背景音乐一般隐藏在frame中(否则一换页面音乐就被打断了),如果弹出的页面包含frame,而不是真正包含背景音乐链接的页面,就会抓不到。这时还需要按后面说的步骤进入frame中的页面。
另外有些E书为了避免单调,会一次打包进去几个midi文件,每次运行的时候随机选择一个作为背景音乐。对于这样的E书,用上面的代码只能抓到当前背景音乐。如果想抓全部,只能自己对网页源代码进行分析,组合出全部背景音乐的URL,然后在地址栏上输入生成下载链接的JavaScript代码再回车,一次下载一个。注意在下载链接上也只能点右键后选“目标另存为”,不能直接点链接。如果实在没有本事对网页源代码进行分析,只能多运行几回、多抓几回了,正所谓“落后就要挨打”。示例:已知某音乐文件的绝对URL为http://ebook/1.mid,则生成下载链接的代码为:
javascript:document.write('<a href="http://ebook/1.mid">右键另存为</a>');
[url=]八、进入frame页面[/url]
上面给出的所有JavaScript代码都是针对当前页面的,也就是说,只有当前页面中真的包含音乐文件、Flash文件,才能抓到所需的文件。如果是frame,就必须进入frame中的页面,才能抓取。
检测当前页面是否是frame,最简单的办法就是按前述一般步骤进行操作,然后在步骤4中,将下面内容复制、粘贴到地址栏上,然后按回车键:
javascript:str='<HTML><HEAD><BASE HREF="';str+=document.URL;str+='"></HEAD><BODY><br>\n';c=document.all;for(i=0;i<c.length;i++){o=c[i];if(o.tagName!='IFRAME'&&o.tagName!='FRAME')continue;str+=o.tagName;str+=' : <a href="';str+=o.src;str+='">';if(o.name=='')str+=o.src;else str+=o.name;str+='</a><br>\n';};str+='</BODY></HTML>';document.write(str);
这段代码自动对网页进行检查,如果嵌入了frame(包括iframe),则自动显示出frame中的页面链接,否则显示一个空页或无反应。直接点击链接,即可进入相应的页面。
为了保证通用性,上面的代码只对第一层frame进行检查,这对iframe来说问题不大,因为不会有几个正常人会去玩嵌套iframe;但对于普通frame来说,嵌套的可能性还是很大的,而上面的代码需要一层层点进去才能见到嵌套frame,未免有点麻烦。解决的办法就是:如果用上面代码显示的全是FRAME,没有IFRAME,则可以用下面的代码显示全部嵌套frame:
javascript:str='';function getFrame(c,i,j){for(i=0;i<c.length;i++){o=c[i];for(k=0;k<j;k++)str+=' ';str+='<a href="';str+=o.location;str+='">';if(o.name!='')str+=o.name;else str+=o.location;str+='</a><br>\n';no=o.document.frames;if(no.length>0)getFrame(no,0,j+1)};};getFrame(document.frames,0,0);document.write(str);
这段代码自动对网页进行检查,显示出嵌套frame中所有页面的链接及嵌套关系,没有frame则显示一个空页或无反应。直接点击链接,即可进入相应的页面。注意如果页面中含有iframe,则上面的代码可能会出错,所以才要先用第一段代码检查一下有没有iframe。
如果网页中采用了js代码对frame进行检测,导致网页不能脱离frame运行,则为了获得嵌入frame页面中的内容,可以在用上面的代码显示出frame页面链接后,直接在页面链接上点右键选“目标另存为”,保存出HTML代码后再手工编辑或用TextForever等工具辅助编辑。
miniKillEBook v1.04以前的版本存在一个疏忽:我光想到处理FRAME,忘记处理IFRAME,因此在某些人中开始流传这样一种说法:将网页嵌入IFRAME,即可避免被miniKillEBook反编译。在v1.04出来之后,这种说法就真的只能成为传说了。
九、其它问题
Q:如果按下Ctrl+N键后,弹出的IE窗口没有菜单、地址栏,怎么办?
A:从CtrlN ver 1.03开始,提供一个可以打开/关闭的“高级界面”,通过里面的“Script命令”功能,可以直接将要执行的JavaScript代码推送到IE窗口中执行,不用再在地址栏输入。
Q:如果E书起来后禁止了Windows的复制、粘贴功能,上面的js代码好长,不想一个字符一个字符敲,怎么办?
A:从CtrlN ver 1.03开始,提供一个可以打开/关闭的“高级界面”,通过里面的“Script命令”功能,可以直接将要执行的JavaScript代码或URL推送到IE窗口中执行,不用再在地址栏输入。如果您写了自己的JavaScript代码,也可以将它加到CtrlN.spt文件(纯文本文件)中,这样以后可以在Script命令选择窗口中直接选择。
附录 版本更新记录
Version 1.01
按照CtrlN ver 1.03的新增功能,对文档进行了修订。