发新话题
打印

在帮助文件(chm)中如何链接一个外部文件

在帮助文件(chm)中如何链接一个外部文件

  下面是一封读者的来信:“我用flash制作一个以.swf为扩展名的动画,加入到FrontPage中,可以显示动画效果.用HTMLHelp将用FrontPage编辑的HTML文件编译成帮助文件,在应该显示动画的位置是一个空白框,其它都正常.经查发现.swf文件并未编译进帮助文件。如果将.swf文件做成绝对路径,则可以正常编译.因做的帮助文件需要多处使用,所以必须用相对路径,目前解决不了这个问题,能帮我解答吗?”
  真是无独有偶,我们也遇到并刚好解决了类似的问题。今天就借这个机会,把这个问题的解决办法教给大家。
  首先说一下,我们使用的chm编译工具是HTML Help Workshop,以下方法也在该软件中试用成功。

  在使用和编译chm文件的时候,我们往往需要链接一些外部的文件。比如说你向链接一段视频剪辑,如果把视频剪辑也编译在chm文件之内的话,将会是一个非常巨大的chm文件。在使用过程中会有很大的困难。另外的一种状况可能是这样的:你需要链接一个readme文件,但是当你在制作chm时这个readme文件还没有做好,那么也只能先做好一个对外部文件的链接。
  在设计和制作普通的web(html)文档的时候,链接一个文件是很简单的,只需要指定一个目标文件的位置就可以了。至于说包含这个链接的页面的位置是不相关的。
  然而,在编译一个chm文件的时候,情况就会发生变化了。主要的问题在于:只能使用一个确定的路径来链接外部的文件。当然,如果确定将要编译的chm文件的使用环境是完全一样的,这个问题就不存在。但是,如果一个用户把chm文件安装在了一个你不希望的地方会怎么样?所有的链接都会实效。还有一个类似的情况是:chm文件在一个无法事先知道盘符的光盘上被引用。
  可以使用java script来摆脱这个问题,在下面的代码中,使用定位控件找出chm文件在具体计算机上所处的位置,解析出一个指定文件的确定的路径。值得注意的是需要将被引用的文件和chm放在相同的目录中。

  下面,一步步来解释这个脚本是如何工作的。括号内的内容是注释。
  <SCRIPT language=javascript>
  function parser(fn){
  var x,y,s1,a,ra link;
  (这里,这个函数开始时需要定义一些变量,变量“fn”将在脚步中起到一个传值的作用。)
  ra=/:/;
  a=location.href.search(ra);
  (脚本的这个搜索是寻找在位置对象中的第一个冒号。)
  if (a == 2)
  X = 14;
  else
  X = 7;
相关主题

TOP

  (在表示路径时,可能会有两种协议,这里需要做一个测定。如果说a的值是2,那么就是使用的mk:@MSITStore:协议,这个协议刚好是14个字符。否则使用的协议就是ms-its:,刚好7个字符。根据具体使用的协议来确定x的值。如果是前者,x的值就是14。否则就是7。)
  sl = "\\";
  Y = location.href.lastIndexOf(sl)   1;
  link = 'file:///'   location.href.substring(X, Y)   fn;
  (这就是x和y这两个变量起作用的地方,substring这个截取子字符串的语句使用x和y这两个变量在location.href中截去字符串的开始和结束部分。例如:如果location.href返回的值是ms-its:C:\dir\file.chm::/topic.htm,在截去时,如果x=7,那么最前面的7个字符就被去掉,如果y=14,那么第14个以后的字符也将被去掉。这样,结果是 C:\dir\是chm文件的跟路径,然后把字符串"file:///" 加在整个字符串的前面,最后,把目标文件的文件名(variable "fn")加在最后。)
  location.href = link;
  }
  
  (最后,位置对象的路径值被存储在变量“link”中。)
  完整的脚步代码是这样的:
  <SCRIPT language=JScript>
  function parser(fn) {
  var X, Y, sl, a, ra, link;
  ra = /:/;
  a = location.href.search(ra);
  if (a == 2)
  X = 14;
  else
  X = 7;
  sl = "\\";
  Y = location.href.lastIndexOf(sl)   1;
  link = 'file:///'   location.href.substring(X, Y)   fn;
  location.href = link;
  }
  </SCRIPT>
  在html中链接这个文件的代码是这样的:
  <A onclick="parser('loremipsum.htm')" style="CURSOR: hand; TEXT-DECORATION: underline; BR>: green">Link to loremipsum.htm</A>
  目标文件的文件名(在括号中的)在脚步中作为一个变量被传递(如整个例子中的“fn”)。这样的话,你可以通过同一段的脚本来,使用不同的锚点来接连不同的文件。
  需要注意的是
  1)在编译的时候,你需要链接的文件应该和你的chm文件在同一个目录中。
  2)不能在<A>标记中使用href属性。
  3)所有的锚点(链接文件的链接)的样式属性必须用手工来定义,而使锚点看起来象一个链接。(比如变成一个小手。)
  4)在某些情况下,由于用户的系统的原因(比如没有安装恰当的软件。),可能会无法打开链接的文件。
  现在回到那个网友的问题上来,他的问题有两个方法来解决:使用本文提供的方法,直接把swf文件链接进来。还有一个办法就是使用文章提供的查找文件的地址的方法,把不同应用情况下的文件的绝对地址找到。在html中用变量的方法来链接swf文件。

TOP

发新话题