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
This commit is contained in:
kichik 2004-01-01 16:30:46 +00:00
parent ea890d3e2e
commit d97cc95c6c
2 changed files with 76 additions and 12 deletions

View file

@ -6,7 +6,7 @@
\cfg{xhtml-contents-depth-0}{5} \cfg{xhtml-contents-depth-0}{5}
\cfg{xhtml-head-end}{<link rel="stylesheet" href="style.css" type='text/css' /><script language="JScript" src="chmlink.js"></script>} \cfg{xhtml-head-end}{<link rel="stylesheet" href="style.css" type='text/css' /><script language="JavaScript" type="text/javascript" src="chmlink.js"></script>}
\cfg{xhtml-rlink-prefix}{#" onclick="parser('} \cfg{xhtml-rlink-prefix}{#" onclick="parser('}

View file

@ -1,18 +1,56 @@
function FolderExists(fn) function FolderExists(fn)
{ {
var fso = new ActiveXObject("Scripting.FileSystemObject"); alert("testing for folder " + fn);
return fso.FolderExists(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) function FileExists(fn)
{ {
var fso = new ActiveXObject("Scripting.FileSystemObject"); alert("testing for file " + fn);
return fso.FileExists(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) function parser(fn)
{ {
var X, Y, sl, a, ra, link; var X, Y, sl, a, ra, re;
ra = /:/; ra = /:/;
a = location.href.search(ra); a = location.href.search(ra);
if (a == 2) if (a == 2)
@ -21,32 +59,58 @@ function parser(fn)
X = 7; X = 7;
sl = "\\"; sl = "\\";
Y = location.href.lastIndexOf(sl) + 1; 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; lfn = location.href.substring(X, Y) + fn;
re = /%20/g; re = /%20/g;
lfn = lfn.replace(re, " "); lfn = lfn.replace(re, " ");
re = /\//g; re = /\//g;
lfn = lfn.replace(re, "\\"); lfn = lfn.replace(re, "\\");
var objShell = new ActiveXObject("Shell.Application");
alert("trying to open " + lfn);
if (FolderExists(lfn)) if (FolderExists(lfn))
{ {
alert("folder exists, execing");
var objShell = new ActiveXObject("Shell.Application");
objShell.Open(lfn); objShell.Open(lfn);
} }
else if (FileExists(lfn)) else if (FileExists(lfn))
{ {
alert("file exists, execing");
execed = false;
htmlre = /\.html?$/; htmlre = /\.html?$/;
txtre = /\.txt$/; 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; re = /\\/g;
lfn = lfn.replace(re, "/"); lfn = lfn.replace(re, "/");
re = /\ /g; re = /\ /g;
lfn = lfn.replace(re, "%20"); lfn = lfn.replace(re, "%20");
alert("using normal method " + lfn);
location.href = 'file:///' + lfn; location.href = 'file:///' + lfn;
} }
else
{
objShell.ShellExecute(lfn, "", "", "open", 1);
}
} }
else if (fn.substring(0, 3) == "../") else if (fn.substring(0, 3) == "../")
{ {