标题:
HP模板+使用教程(支持书签功能,XP、WIN7都无问题)
[打印本页]
作者:
cloudstrife
时间:
2013-1-11 20:10
标题:
HP模板+使用教程(支持书签功能,XP、WIN7都无问题)
大概一个月前我在河洛论坛有人发帖指责E书作者做书只顾精美,不重实用。E书中没有书签功能,也不能保存阅读设置。当时就想把我自己用的书签模板修改一下发出来,结果拖延症犯了,一拖就是一个月,还好玛雅人不靠谱,否则这帖子就永远发不出来了。
这个帖子可能比较长,请各位E书作者有些耐心。另外,此模板为HP模板,不适用于软景。仍然在使用软景的E书作者,使用软景生成的html文件,实现书签功能非常简单,原因下面会介绍。
我所做的书签模板,是在一个叫做“绿色卷抽”的HP模板的基础上修改的,原模板作者是谁并不知道。这个模板我用了很多年了,原因是这个模板的底色是绿色的,而绿色比较护眼,在我收集的一些绿色的模板中,只有这个模板个人觉得比较顺眼,所以一直在使用它。后来将它改成了可以保存书签的模板。
下面开始正题:
一、前言
首先跟各位E书作者介绍书签模板的原理。
很早以前,不知道是哪位E书前辈曾经发过一个HP的书签模板,具体作者是谁,已经忘记。该模板是利用URL来传递书签参数,而非像普通的HP模板,在frame里面利用parent变量来传递,并且利用Cookie来保存阅读设置。这个模板只适用于EPExpress打包生成的电子书,在CHM中无法保存阅读设置。而且此模板只能在XP下起作用,在WIN7下,无法保存书签。也就是说,在WIN7下利用URL传递参数保存书签的方式,在EXE电子书中无法使用。
要在WIN7下使电子书中实现书签功能,首先要知道以下两个问题:
1、
在WIN7下,CHM电子书实际上是用IE7的内核来渲染的,不会使用高版本的IE8或者IE9。在XP中,如果用户没有升级IE至7.0,那么CHM会使用IE6内核来渲染,升级以后会使用IE7的内核渲染,但是,用户升级到8.0后,CHM仍然是使用IE7的内核,不会使用IE8。不相信的朋友,可以制作一个含有IE9特效的网页,再打包成CHM电子书,看看IE9的特效是否失效。同样,EPExpress打包的EXE电子书使用内核的规律跟CHM也是一样,即在WIN7下也使用IE7来渲染。之前提到的HP书签模板,我看到有人说不支持WIN7、IE8,这种说法是有问题的,因为WIN7下,CHM是使用IE7来渲染的。
2、
不管在哪个版本的WINDOWS中,CHM都无法储存Cookie,而EPExpress打包的电子书却可以。所以上面提到的模板,在CHM电子书中虽然可以保存书签,但是不能保存阅读设置。
好了,介绍完毕,现在开始介绍我的模板。
二、CHM电子书书签模板
由于CHM不能储存Cookie,所以在CHM中,书签和阅读设置都将用URL来传递。通过CHM的收藏夹功能,将URL和参数保存下来。由于常用的HP模板都有iframe框架,无法得到页面真实的url,并且HP分章阅读页面时通过JS脚本调用txt文件来实现的,仅有一个URL,所以普通的HP模板是无法保存书签的。而软景生成的html文件,每章都有一个独立的URL,可以直接使用CHM的书签功能。
用来打包电子书的软件可以用htm2chm,其他只要能实现CHM收藏夹功能的CHM制作软件,都可以用来打包,譬如:EasyCHM。大家经常使用的HugeCHM,则没有该功能。
文本的排版和HP的使用在这里不再赘述,教程很多。各位可将“绿色卷轴(CHM书签版)”放入HP的template目录下,也可以直接放入HP生成的E书文件夹下,自己手动修改模板中的书名、作者和制作人等内容。
完成后,请将目录下的start.htm和js目录下的chapter.js两个文件删除,并且将page.js中pages数组后面的函数全部删除,然后将以下代码复制进去,保存:
function loadurl(url,num,arr)
{
var jud;
if (num == undefined || num == -1)
{
jud=true;
url="index.htm";
for(i=1;i<7;i++)
{
if(arr[i]!=0)
if(jud) {url=url+"#"+paraName[i]+"="+arr[i]; jud=false;}
else url=url+"&"+paraName[i]+"="+arr[i];
}
document.location=url;
}
else
{
url=url+"#"+paraName[0]+"="+num;
for(i=1;i<7;i++)
{
if(arr[i]!=0)
{url=url+"&"+paraName[i]+"="+arr[i];}
}
document.location = url;
}
}
function loadchaurl(url,num,arr)
{
var jud;
if (num == undefined || num == -1)
{
jud=true;
url="index.htm";
for(i=1;i<7;i++)
{
if(arr[i]!=0)
if(jud) {url=url+"#"+paraName[i]+"="+arr[i]; jud=false;}
else url=url+"&"+paraName[i]+"="+arr[i];
}
document.location=url;
}
else
{
url=url+"#"+paraName[0]+"="+num;
for(i=1;i<7;i++)
{
if(paraValue[i]!=0)
url=url+"&"+paraName[i]+"="+arr[i];
}
document.location = url;
document.location.reload();
}
}
function loadtxt(i){
document.write('<script language="JavaScript" src="../txt/'+pages[i][0]+'.txt"></script>');
}
复制代码
完成后,使用htm2chm打包。在htm2chm的编译器中,选择index目录下的index.htm作为主页,改好标题。
下一步是至关重要的一步:
点击“预设”后面“文件夹锤子”标志:
[attach]76709[/attach]
在弹出的“预设编辑器”中,“默认标签”下拉框中,选择“收藏夹”,并将下面的“收藏夹”打上勾,目录、索引这些由于没有制作,所以不打勾。其他的设置,可以学我的,也可以自己设置:
[attach]76710[/attach]
OK,点“确定”后,在编译器中点“开始”,电子书就做好了。更改阅读设置后,点击页面中的“保存设置”按钮,阅读设置才能保存。想保存书签的时候,只要点击左上角的“显示”,然后点击“添加”,就可以保存书签了,阅读设置也会保存。
[attach]76711[/attach]
缺点:1、同页面不能跳转。就是说,如果你保存了一个分章阅读页面的书签,那么在章节阅读页面,点击书签是没有用的,必须先转到其他页面,譬如目录页面,再点书签。这是CHM电子书收藏夹自己的问题,无法克服。
2、在收藏夹中保存的书签名是URL,并不是章节名称或分卷名称,不够直观,也不够美观。事实上这个问题是可以解决的,只是需要制作目录和索引文件。制作有点麻烦,而且制作好后,用htm2chm,仍然不会显示章节名称;farhtml则对中文目录和索引支持不好,显示乱码……我尝试了至少5种软件,都不能得到显示章节名称的电子书,最后用一种比较复杂方法才做好。有兴趣的朋友可以单独联系我。如果只需要功能,不考虑美观,大家就用上面的方法吧。我会提供一个可以显示章节名称的电子书,给大家下载参考。各位E书作者也可以用其他的软件试一试,如果可以很好的做出收藏夹中显示章节名称而不显示URL电子书,也请联系我,或者发帖分享给大家。
可显示章节名称的电子书截图:
[attach]76712[/attach]
三、EPE电子书书签模板
我个人不喜欢EXE的电子书,如果我发书的论坛不强制要求EXE格式,我几乎从来不做EXE的电子书。原因是现在用EPE打包的电子书,功能上和CHM几乎没有区别,只不过多了个图标和logo,反编译也不方便,还容易感染病毒。这个适用于EPE或者其他可生成能储存Cookie的电子书的模板,是我临时做的,有什么bug请联系我。
EPE的模板相对简单,HP输出后,删除js目录下的chapter.js,然后将page.js中pages数组用后面的内容删除,将以下代码复制进去:
function loadurl(url,num)
{
if (num == undefined)
{
parent.document.title = '{书名} - 作者:{作者}';
document.location = url;
}
else
{
parent.txt = num;
if (num == -1)
{
parent.document.title = '{书名} - 作者:{作者} - 制作:{制作}';
document.location = "index.htm";
}
else
{
if (url == 'chapter.htm') parent.document.title = pages[parent.txt][1];
else parent.document.title = pages[parent.txt][3] + " [分卷阅读]";
document.location = url;
}
}
}
function loadtxt(i)
{
document.write('<script language="JavaScript" src="../txt/'+pages[i][0]+'.txt"></script>');
}
function setCookies(cookieName,cookieValue,expirehours)
{
var today=new Date();
var expire=new Date();
expire.setTime(today.getTime()+3600000*356*24);
document.cookie=cookieName+'='+escape(cookieValue)+';expires='+expire.toGMTString();
}
function ReadCookies(cookieName)
{
var theCookie=''+document.cookie;
var ind=theCookie.indexOf(cookieName);
if(ind==-1||cookieName=='')return'';
var ind1=theCookie.indexOf(';',ind);
if(ind1==-1)ind1=theCookie.length;
return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}
复制代码
然后用EPE按照普通的HP模板打包即可。在首页有一个“读取书签”按钮,点击以后,就会跳转到分章阅读或者分卷阅读页面,如果之前没有保存过书签,则会提示“没有保存的书签”。然后在分章和分卷阅读页面的顶部,都有一个“保存书签”的按钮,点一下,就可以保存书签了。在分章、分卷和全文阅读页面的顶部,有一个“保存设置”的按钮,点一下,可以保存设置,很简单。 缺点:无法保存多个书签,这个问题其实可以解决,但是目前我实在没有兴趣修改EXE电子书的模板,我几乎用不到,有兴趣的可以自己去改改,或者等我有兴趣的时候吧。
这两个模板可能还存在一些我未发现的bug,发现的朋友可以告诉我,我会更新的。chm版的多余的代码可能比较多,也不够简洁,有时间我会改改,前提是我的拖延症不要又爆发。。。。。看了一下,那个说E书华而不实的帖子是12月11号发的,今天1月11,正好拖了一个月。。。
示例的电子书是猫腻的《间客》,文本来自于易水西风。
作者:
husay
时间:
2013-1-14 09:10
好象太麻烦了,不是懒人用的工具啊?
作者:
无极
时间:
2013-1-14 16:17
看了脚本,还是利用URL实现的
作者:
cloudstrife
时间:
2013-1-14 18:16
标题:
回 7楼(无极) 的帖子
上次QQ给你,没看到人啊。CHM似乎只能用URL的方式,没别的办法
欢迎光临 (http://zasq.net/~zazww/)
Powered by Discuz! X3.2