То, как мое HTML-приложение обрабатывает относительные адреса, слишком сильно зависит от того, как оно работает
Мой HTML-файл приложения F:\relroot\libname.lib\textapp.hta
(имя изменено) содержит следующую функцию:
function fullNameOfFile(filename) {
var fso = newMedium(); return fso.GetAbsolutePathName(filename)
}
Когда я запускаю приложение через Open
или дважды щелкните его в каталоге,
fullNameOfFile("../etc.txt")
возвращается "F:\relroot\etc.txt"
[работает отлично!].
Когда я запускаю его через Open with:Microsoft HTML Apln Host
, тем не мение:
fullNameOfFile("../etc.txt")
возвращается "C:/Windows/etc.txt"
[неправильный номер!].
Как мне написать код, чтобы он работал, независимо от того, как работает приложение?
1 ответ
Я думаю, что у меня могло бы быть "Aspie-riged" решение (или возможно два)
Видимо, открытие приложения HTML с помощью Open (или двойной щелчок) задает для "текущего" каталога каталог, содержащий приложение, при открытии с помощью Open With:Microsoft® HTML Application Host использует каталог по умолчанию (например, "C:\WINDOWS\system32
")
var shell = new ActiveXObject("WScript.Shell");
var wasDir = shell.currentDirectory /* OPTIONAL: push original current directory
to allow restoration later */
var swDL = false; // for differences in device file format
var splitter = (swDL ? '/' : '\\') // foreslash v. backslash
var slashes = (swDL ? '///' : '//') /* slashes between scheme/protocol
and authentication/host */
var lhref = swDL ? unescape(location.href) : document.URL;
var newDir = lhref.slice(location.protocol.length + slashes.length,
lhref.lastIndexOf(splitter));
/*
// uncomment this block for an "inside window"
alert("Entering Directory: «" + wasDir + "»\n" +
"Protocol/Scheme: «" + location.protocol + "»\n" +
"Location HREF: «" + lhref + "»\n" +
"Trial Directory: «" + newDir + "»");
*/
shell.currentDirectory = newDir
Кажется, это работает как брелок в моей системе (Dell PC, Internet Explorer/ Edge). Я также добавил несколько комментариев на случай, если следующему пользователю потребуется настроить его для своей системы.