4

*.hhc 文件或帮助页面 .htm 的 html 代码中的父目录的相对路径在编译的 .chm 帮助文件中不起作用。

在本例中,file1.htm 与 *.hcc 文件位于同一目录中,而 file2.htm 位于需要通过父目录访问的其他目录中。HELP Workshop IDE 创建以下 *.hhc:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft&reg; HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD><BODY>
<OBJECT type="text/site properties">
    <param name="ImageType" value="Folder">
</OBJECT>
<UL>
    <LI> <OBJECT type="text/sitemap">
        <param name="Name" value="Introduction">
        <param name="Local" value="file1.htm">
        </OBJECT>
    <LI> <OBJECT type="text/sitemap">
        <param name="Name" value="Topic">
        <param name="Local" value="..\common\file2.htm">
        </OBJECT>
</UL>
</BODY></HTML>

文件 1 的内容以这样的开头:

<html>
    <head>
        <title>Documentation</title>
        <meta name="GENERATOR" content="Microsoft FrontPage 4.0" />
        <link rel="stylesheet" type="text/css" href="..\common\webformat.css" />
        <script language="JavaScript" type="text/javascript" src="..\common\WindowControl.java">
        </script>
    </head>

    <body>

    <table cols=2>
    <tr>
        <td align="left" valign="bottom"><h2>Overview</h2></td>
        <td align="right"><img src="..\common\images\klein.gif" alt="Logo"></td>
    </tr>
    </table>

在已编译的 *.chm 文件中,样式表未应用,javascript 不起作用并且图像不显示。目录中的 file2 也无法访问。

用7zip解压*.chm文件可以看出,编译器将所有文件都放在了同一层,但是却保留了*.htm文件和*.hhc文件中的相对路径不变。这就是它们无法访问的原因:

帮助项目中的帮助文件夹层次结构:

Help
  |-common
  |   |-file2.htm
  |   |-webformat.css
  |   |-WindowControl.java
  |   |-images
  |       |-klein.gif
  |-private
      |-file1.htm

在解压后的 *.chm 文件层次结构中:

Help
  |-file1.htm
  |-file2.htm
  |-webformat.css
  |-WindowControl.java
  |-klein.gif

通过 javascript 指定所有相对路径的替代路径是一个非常不干净的解决方案。此外,它并没有解决 *.hhc 文件中的链接问题。

有任何想法吗?

4

2 回答 2

0

路径应该相对于目录的根目录,并且 URL 使用 FORWARD 斜杠。

配置文件中的所有路径都应相对于文档根目录。所以如果在 CHM 中可以看到 HELP 目录,那么 help 的父级就是 documentroot,而 CHM 项目的项目文件类似于 help/common/xxx.gif。

Afaik 在 html 文件中,url 可以是相对的,也许它偶然发现了错误的斜杠。

(ps 要查看 CHM 的内部结构,我使用 Free Pascal 中的“chmls”命令,但 iirc 一些 *nix CHM 查看器也显示路径)

于 2012-11-06T11:03:48.430 回答
0

我遇到了类似的问题,我为我的情况找到了解决方法。我希望我的项目在网络共享上可用,因此我在该共享上的目录中创建了我的 *.hhp 文件。我尝试了很长时间让 HHP 软件找到我非常简单的 HTML 文件,这些文件位于 HHP 文件的子目录中,但没有成功。我最终在我的本地 C 驱动器上创建了我的 HHP 项目。当我这样做时,我可以从我们网络上的任何地方访问支持文件。将我的 HTML、CSS 等文件留在共享中对我有利,但它们可以在任何地方。唯一的缺点是编译项目后,您必须将 *.chm 文件复制到您想要的位置,但这并不是一个主要的不便。您甚至可以为该作业创建一个简单的 .bat 文件。

于 2018-08-26T15:04:25.017 回答