From d97cc95c6c89117968d712e763848cfe31ebe27e Mon Sep 17 00:00:00 2001 From: kichik Date: Thu, 1 Jan 2004 16:30:46 +0000 Subject: [PATCH] this should solve any JScript errors by adding exception handling or drop to the simplest and ugliest solution if exception handling is not available git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3342 212acab6-be3b-0410-9dea-997c60f758d6 --- Docs/src/chm_config.but | 2 +- Docs/src/chmlink.js | 86 +++++++++++++++++++++++++++++++++++------ 2 files changed, 76 insertions(+), 12 deletions(-) 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) == "../") {