【发布时间】:2021-03-22 11:07:15
【问题描述】:
这里有很多关于这个主题的帖子,但没有一个是从网页启动 CHM 帮助文件的解决方案。
背景:
- 这个项目不在互联网上,它是一个在运行 IE11 的医疗设备上本地运行的网站。
- 之前编码为Flash ActionScript web app,成功使用了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 代码。 _helpLibIndex 和 _myHelpLink 之前是从导入的 JSON 文件中检索到的:
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。非常感谢任何帮助!
【问题讨论】:
标签: javascript actionscript launch chm externalinterface