这里有很多关于这个主题的帖子,但没有一个是从网页启动 CHM 帮助文件的解决方案。
背景:
该项目不在互联网上,它是一个在 IE11 中运行的医疗设备上本地运行的网站。
它之前被编码为Flash ActionScript Web应用程序,并成功使用了ActionScript的ExternalInterface.call(“callJavascript”,variableStr); 打开 CHM 文件。不幸的是,该项目需要移植到 HTML5,而我还没有找到有效的 JavaScript 解决方案。
CHM 文件及其中每个页面的路径取自 JSON 文件,并且根据需要访问 CHM 中的哪个页面,连接链接。chm/myHelp.chm::cat2page1.html就是一个示例 。
因此,使用 ActionScript,当用户单击按钮时,该函数会创建完整的字符串,传递给包含 HTML 页面中名为“callJavascript”的 JavaScript 函数,该函数又将 CHM 文件打开到正确的页面:
private function launchURL(e:MouseEvent) {
if (_helpLibIndex != "" && _myHelpLink != "") {
// ex: JavaScript: callJavascript('chm/GloCyte.chm::cat2page1.html')
var variableStr:String = _helpLibIndex + "::" + _myHelpPageLink;
ExternalInterface.call("callJavascript", variableStr );
}
}
以及托管 Flash swf 的 HTML 页面上的 JavaScript:
<script type="text/javascript">
function callJavascript(str) {
//window.alert(str);
window.showHelp(str);
}
</script>
应该很容易转换为直接 JS - 对吧?不幸的是我有很多问题。
在直接 HTML5 页面中调用类似的函数时,在将完整的 CHM 路径和页面连接在一起并将其传递给启动函数时,我收到 404 错误“找不到项目”。
如果我忽略该页面并仅使用 CHM 文件的路径,浏览器会提示“打开或保存”该文件。当我选择“打开”时,CHM 文件在 Microsoft HTML 帮助控件版本 10.0 中启动到堆栈中的第一页,但仅显示页面的导航面板,并且正文区域为空白/空。从以这种方式打开的导航面板中手动选择页面将不会在正文区域中显示其内容。但是,如果我从桌面手动打开 CHM 文件,它会显示正文区域中的所有页面,但从网页启动它时仍然失败。
这是我在新的 HTML5 页面中的 JS 代码。之前从导入的 JSON 文件中检索 _helpLibIndex 和 _myHelpLink:
function launchURL() {
if (_helpLibIndex != "" && _myHelpLink != "") {
// appending myHelpLink gives 404 error.
// leaving it off kinda launches the CHM, but no content is viewable in the body area
// example string = 'chm/myHelp.chm::cat2page1.html'
var variableStr = _helpLibIndex + "::" + _myHelpLink;
window.showHelp(variableStr);
console.log("attempted to launch the showHelp file. URL is: " + variableStr);
}
我不太明白在这种情况下 ActionScript 工作与 JavaScript 不工作之间的区别,因为这两种情况下的最终调用都是来自托管网页的 JS。非常感谢任何帮助!
GCT1015
相关分类