标题: 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数组后面的函数全部删除,然后将以下代码复制进去,保存:
  1. function loadurl(url,num,arr)
  2. {
  3.     var jud;
  4.     if (num == undefined || num == -1)
  5.     {
  6.         jud=true;
  7.         url="index.htm";
  8.         for(i=1;i<7;i++)
  9.         {
  10.             if(arr[i]!=0)
  11.                 if(jud)    {url=url+"#"+paraName[i]+"="+arr[i]; jud=false;}
  12.                 else url=url+"&"+paraName[i]+"="+arr[i];
  13.         }
  14.         document.location=url;
  15.     }
  16.     else
  17.     {
  18.         url=url+"#"+paraName[0]+"="+num;
  19.         for(i=1;i<7;i++)
  20.         {
  21.             if(arr[i]!=0)
  22.             {url=url+"&"+paraName[i]+"="+arr[i];}
  23.         }
  24.         document.location = url;
  25.     }
  26. }
  27. function loadchaurl(url,num,arr)
  28. {
  29.     var jud;
  30.     if (num == undefined || num == -1)
  31.     {
  32.         jud=true;
  33.         url="index.htm";
  34.         for(i=1;i<7;i++)
  35.         {
  36.             if(arr[i]!=0)
  37.                 if(jud)    {url=url+"#"+paraName[i]+"="+arr[i]; jud=false;}
  38.                 else url=url+"&"+paraName[i]+"="+arr[i];
  39.         }
  40.         document.location=url;
  41.     }
  42.     else
  43.     {
  44.         url=url+"#"+paraName[0]+"="+num;
  45.         for(i=1;i<7;i++)
  46.         {
  47.             if(paraValue[i]!=0)
  48.             url=url+"&"+paraName[i]+"="+arr[i];
  49.         }
  50.         document.location = url;
  51.         document.location.reload();
  52.     }
  53. }
  54. function loadtxt(i){
  55.         document.write('<script language="JavaScript" src="../txt/'+pages[i][0]+'.txt"></script>');
  56. }
复制代码
  完成后,使用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数组用后面的内容删除,将以下代码复制进去:
  1. function loadurl(url,num)
  2. {
  3.     if (num == undefined)
  4.     {
  5.         parent.document.title = '{书名} - 作者:{作者}';
  6.         document.location = url;
  7.     }
  8.     else
  9.     {
  10.         parent.txt = num;
  11.         if (num == -1)
  12.         {
  13.             parent.document.title = '{书名} - 作者:{作者} - 制作:{制作}';
  14.             document.location = "index.htm";
  15.         }
  16.         else
  17.         {
  18.             if (url == 'chapter.htm') parent.document.title = pages[parent.txt][1];
  19.             else parent.document.title = pages[parent.txt][3] + " [分卷阅读]";
  20.             document.location = url;
  21.         }
  22.     }
  23. }
  24. function loadtxt(i)
  25. {
  26.     document.write('<script language="JavaScript" src="../txt/'+pages[i][0]+'.txt"></script>');
  27. }
  28. function setCookies(cookieName,cookieValue,expirehours)
  29. {
  30.     var today=new Date();
  31.     var expire=new Date();
  32.     expire.setTime(today.getTime()+3600000*356*24);
  33.     document.cookie=cookieName+'='+escape(cookieValue)+';expires='+expire.toGMTString();
  34. }
  35. function ReadCookies(cookieName)
  36. {
  37.     var theCookie=''+document.cookie;
  38.     var ind=theCookie.indexOf(cookieName);
  39.     if(ind==-1||cookieName=='')return'';
  40.     var ind1=theCookie.indexOf(';',ind);
  41.     if(ind1==-1)ind1=theCookie.length;
  42.     return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
  43. }
复制代码
然后用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://162.241.138.223/~zazww/) Powered by Discuz! X3.2