diff --git a/Docs/src/chm_config.but b/Docs/src/chm_config.but index 0d47d820..e542bd3d 100644 --- a/Docs/src/chm_config.but +++ b/Docs/src/chm_config.but @@ -6,7 +6,7 @@ \cfg{xhtml-contents-depth-0}{5} -\cfg{xhtml-head-end}{} +\cfg{xhtml-head-end}{} \cfg{xhtml-rlink-prefix}{#" onclick="parser('} diff --git a/Docs/src/chmlink.js b/Docs/src/chmlink.js index 4fe5557b..4fac6af3 100644 --- a/Docs/src/chmlink.js +++ b/Docs/src/chmlink.js @@ -1,18 +1,56 @@ function FolderExists(fn) { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - return fso.FolderExists(fn); + alert("testing for folder " + fn); +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) + try + { + var objShell = new ActiveXObject("Shell.Application"); + var fso = new ActiveXObject("Scripting.FileSystemObject"); + return fso.FolderExists(fn); + } + catch(e) { } +/*@end @*/ + alert("exception or old version"); + return false; } function FileExists(fn) { - var fso = new ActiveXObject("Scripting.FileSystemObject"); - return fso.FileExists(fn); + alert("testing for file " + fn); +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) + try + { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + return fso.FileExists(fn); + } + catch(e) { } +/*@end @*/ + alert("exception or old version"); + return true; +} + +function TryShellExec(fn) +{ + alert("trying to shell execute " + fn); +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) + try + { + var objShell = new ActiveXObject("Shell.Application"); + objShell.ShellExecute(fn, "", "", "open", 1); + return true; + } + catch(e) { } +/*@end @*/ + alert("exception or old version"); + return false; } function parser(fn) { - var X, Y, sl, a, ra, link; + var X, Y, sl, a, ra, re; ra = /:/; a = location.href.search(ra); if (a == 2) @@ -21,32 +59,58 @@ function parser(fn) X = 7; sl = "\\"; Y = location.href.lastIndexOf(sl) + 1; +/*@cc_on @*/ +/*@if (@_jscript_version >= 5) + try + { + var fso = new ActiveXObject("Scripting.FileSystemObject"); + } + catch(e) + { + if (fn.substring(0, 3) == "../") + { + fn = fn.substring(3); + } + } + @else @*/ + if (fn.substring(0, 3) == "../") + { + fn = fn.substring(3); + } +/*@end @*/ lfn = location.href.substring(X, Y) + fn; re = /%20/g; lfn = lfn.replace(re, " "); re = /\//g; lfn = lfn.replace(re, "\\"); - var objShell = new ActiveXObject("Shell.Application"); + + alert("trying to open " + lfn); + if (FolderExists(lfn)) { + alert("folder exists, execing"); + var objShell = new ActiveXObject("Shell.Application"); objShell.Open(lfn); } else if (FileExists(lfn)) { + alert("file exists, execing"); + execed = false; htmlre = /\.html?$/; txtre = /\.txt$/; - if (!("ShellExecute" in objShell) || lfn.match(htmlre) || lfn.match(txtre)) + if (!lfn.match(htmlre) && !lfn.match(txtre)) + { + execed = TryShellExec(lfn); + } + if (!execed) { re = /\\/g; lfn = lfn.replace(re, "/"); re = /\ /g; lfn = lfn.replace(re, "%20"); + alert("using normal method " + lfn); location.href = 'file:///' + lfn; } - else - { - objShell.ShellExecute(lfn, "", "", "open", 1); - } } else if (fn.substring(0, 3) == "../") {