То, как мое 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). Я также добавил несколько комментариев на случай, если следующему пользователю потребуется настроить его для своей системы.

Другие вопросы по тегам