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) == "../")
{