Откройте файл справки CHM на определенной странице через JavaScript

Здесь есть много сообщений на эту тему, но ни одно из них не является решением для запуска файла справки CHM с веб-страницы.

Фон:

  • Этот проект не находится в Интернете, это веб-сайт, который работает локально на медицинском устройстве, работающем в IE11.
  • Ранее оно было закодировано как веб-приложение Flash ActionScript и успешно использовало ExternalInterface.call("callJavascript", variableStr ); чтобы открыть файл CHM. К сожалению, проект необходимо портировать на HTML5, и мне еще предстоит найти работающее решение JavaScript.

Путь к файлу CHM и к каждой странице в нем берется из файла JSON, и в зависимости от того, к какой странице необходимо получить доступ в CHM, ссылка объединяется. Примером этого является chm/myHelp.chm::cat2page1.html.

Таким образом, с ActionScript, когда пользователь нажимал кнопку, эта функция создавала полную строку, передаваемую функции JavaScript с именем «callJavascript» на содержащей HTML-странице, которая, в свою очередь, открывала CHM-файл на нужной странице:

private function launchURL(e:MouseEvent) {
        if (_helpLibIndex != "" && _myHelpLink != "") {
            // ex: JavaScript:   callJavascript('chm/GloCyte.chm::cat2page1.html')
            var variableStr:String = _helpLibIndex + "::" + _myHelpPageLink;
            ExternalInterface.call("callJavascript", variableStr );
        }
    }

И JavaScript на HTML-странице, на которой размещается Flash SWF:

<script type = "text/javascript">
        function callJavascript(str) {
            //window.alert(str);
            window.showHelp(str);
        }
    </script>

Должно быть легко конвертировать в обычный JS — верно? У меня много проблем к сожалению.

  • При вызове аналогичной функции на прямой странице HTML5 я получаю сообщение об ошибке 404 «элемент не найден» при объединении полного пути и страницы CHM вместе и передаче их функции запуска.
  • Если я оставлю страницу и просто использую путь только к файлу CHM, браузер предложит «Открыть или сохранить» файл. Когда я выбираю «Открыть», файл CHM запускается в Microsoft HTML Help Control версии 10.0 на первой странице в стеке, но показывает только панель навигации по страницам, а область тела пуста / пуста. При ручном выборе страницы на панели навигации, открытой таким образом, ее содержимое не будет отображаться в основной области. Однако, если я открою файл CHM вручную с рабочего стола, он отобразит все страницы в области тела, но все равно не удастся запустить его с веб-страницы.

Вот мой код JS на новой странице HTML5. _helpLibIndex и _myHelpLink предварительно извлекаются из импортированного файла JSON:

function launchURL() {
if (_helpLibIndex != "" && _myHelpLink != "") {
   // appending myHelpLink gives 404 error.
   // leaving it off kinda launches the CHM, but no content is viewable in the body area 
   // example string = 'chm/myHelp.chm::cat2page1.html'

   var variableStr = _helpLibIndex + "::" + _myHelpLink;

   window.showHelp(variableStr);

   console.info("attempted to launch the showHelp file. URL is: " + variableStr);

}

Я не совсем понимаю разницу между работающим в этом случае ActionScript и нет JavaScript, поскольку последний вызов в обоих случаях — это JS с веб-страницы хостинга. Любая помощь очень ценится!

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 104
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Краткая история - используйте полный путь при поиске внутри файла ITS (CHM). Согласно моим тестам, спецификации относительного пути, включая спецификацию темы в CHM, не работают. Это работает только для самого файла справки CHM.

Серия исправлений безопасности несколько лет назад сократила HTMLHelp до функции только локальной справки. Возможно, это было исправлено по-другому.

Я надеюсь дать вам идею, но вам придется адаптировать ее для своих нужд (вы упомянули об использовании IE11). У меня нет опыта работы с Flash ActionScript, потому что с ним всегда были проблемы с безопасностью. Итак, я не знаю, почему ActionScript в данном случае работает, а JavaScript нет.

Справка HTML 1.x не имеет возможности доставки сжатой справки по протоколу http. Вы можете указать на .chm на локальном диске пользователя, и вы можете сделать ссылку на .chm для загрузки, но это все, что нужно.

Возможность заглянуть внутрь файла ITS (CHM) уникальна только для Microsoft Internet Explorer. Только Internet Explorer (НЕ браузер Microsoft Edge) может загружать локальный путь, например:

ms-its:D:\_temp\CHM-example.chm::/garden/garden.htm

Префикс ms-its — это подключаемый протокол более ранних дней, который следует старым стандартам, установленным Консорциумом World Wide Web (W3C). Протокол ms-its работает с Microsoft Internet Explorer 4.0 или более поздней версии, но поддерживается не во всех браузерах.

Итак, у меня есть файл test.htm и файл CHM-example.chm в одной локальной D:\_working папке. Обратите внимание: window.showHelp открывает файл справки в формате HTML (.chm) во внешнем приложении (Help Viewer hh.exe).

Обязательно проверьте это с помощью Internet Explorer 11 (контекстное меню, открытое в IE11). AFAIK - showHelp() - это не функция javascript (или JScript) - это метод DHTML Microsoft Internet Explorer.

<!DOCTYPE html>
<html lang = "en">
<head>
    <script type = "text/javascript">
            
        function OpenHelpFile () {
            // open help file in help viewer - IE 11 only
            // --------------------------------------------------------
            // for optional use cases when CHM resides in another place
            // var DriveStr = "D:";
            // var SubFolderStr = "_working";
            
            var HelpFileName = "CHM-example.chm";
            var HelpFileStr = HelpFileName;
            
            // open help file topic in help viewer - IE 11 only
            // --------------------------------------------------------
            <!-- window.showHelp ("CHM-example.chm", null) -->
            alert ("attempted to launch the showHelp file. URL is: " + HelpFileStr);
            window.showHelp (HelpFileStr);
        }

        function OpenHelpTopic () {
            //  open help file topic in help viewer - IE 11 only
            // --------------------------------------------------------
            var DriveStr = "D:";
            var SubFolderStr = "_working";
            var HelpFileName = "CHM-example.chm";
            var HelpTopicStr = DriveStr + "\\" + SubFolderStr + "\\" + HelpFileName + "::" + "/garden/flowers.htm";   
            
            // open help file topic in help viewer - IE 11 only
            // --------------------------------------------------------
            <!-- window.showHelp ("D:\\_working\\CHM-example.chm::/garden/flowers.htm", null) -->
            alert ("attempted to launch the showHelp file. URL is: " + HelpTopicStr);
            window.showHelp (HelpTopicStr);
        }

        function OpenHelpTopicInNewTab () {
            // open help topic in new tab - only working inside IE11 using ms-its protocol
            // ---------------------------------------------------------------------------
            // "ms-its:D:\_working\CHM-example.chm::/garden/garden.htm"
        
            var ProtocolStr = "ms-its:";
            var DriveStr = "D:";
            var PathToFileStr = "\\_working\\CHM-example.chm";
            var HelpTopicStr = ProtocolStr + DriveStr + PathToFileStr + "::" + "/garden/garden.htm";
            
            alert ("attempted to launch the showHelp file. URL is: " + HelpTopicStr);
            
            // please note: window.open (!) ---------------------------------------------
            window.open (HelpTopicStr, null);
        }
        
    </script>
</head>
<body>
<p>Help Information www.help-info.de</p>
<hr />
<p>Open a help file</p>
<div>
    <button onclick = "OpenHelpFile ();">Open a help file!</button>
</div>
<hr />
<p>Open a help topic</p>
<div>
    <button onclick = "OpenHelpTopic ();">Open a help topic!</button>
</div>
<hr />
<p>Open a help topic in a new browser tab</p>
<div>
    <button onclick = "OpenHelpTopicInNewTab ();">Open a help topic in a new browser tab!</button>
</div>
</body>

Шаги кнопки (2 и 3) приводят к снимку экрана ниже (обратите внимание на вторую вкладку браузера в результате третьей кнопки).

Вы можете загрузить указанный выше файл CHM-example.chm с моего информационного сайта HTMLHelp (HH) см. раздел загрузки или загрузить непосредственно с CHM.

Обновлено: (после комментариев)

В качестве первого шага после сохранения этого файла CHM на локальном диске: проверьте, отображается ли содержимое файла CHM после двойного щелчка полностью в окне темы справа.

Если нет, обратите внимание: чтобы открыть этот файл CHM, щелкните файл правой кнопкой мыши, выберите «Свойства», затем установите флажок «Разблокировать» и нажмите «ОК», как показано на снимке экрана ниже:

После создания test.htm из приведенного выше кода в том же каталоге обязательно откройте его в Internet Explorer и разрешите заблокированное содержимое.

Сообщение с кнопкой внизу окна браузера автоматически исчезнет примерно через 10 секунд из соображений безопасности.

Извините за задержку. Спасибо за информацию. Ни один из этих трех вариантов не работает для меня, и я не уверен, почему. Я создал каталог «_working» на диске D: и поместил в него ваш CHM-файл. Я также создал тестовый HTML-файл в том же каталоге, скопировав/вставив в него ваш код.

Kevin Hays 22.12.2020 15:46

@Kevin - я попробую свой собственный ответ с нуля позже.

help-info.de 22.12.2020 15:56

Первая кнопка ведет себя точно так же, как и все мои предыдущие тесты: браузер предлагает открыть или сохранить файл, а выбор «Открыть» запускает CHM в приложении для просмотра справки, но не показывает содержимое в основной области — он просто показывает иерархию CHM. файл. Две другие кнопки вообще не запускают файл CHM, хотя объединенные строки выглядят правильно в предупреждении и в инспекторе IE.

Kevin Hays 22.12.2020 16:03

FWIW, когда я открываю ваш CHM с рабочего стола и перехожу на страницу garden.htm, в свойствах отображается URL-адрес «mk:@MSITStore:D:_working\CHM-example.chm::/Garden/garden.ht‌​ м". Если я наберу это в адресной строке IE, страница откроется в IE. Он также открывается с предоставленным вами URL-адресом (исключая часть @MSITStore:). Теперь мне интересно, есть ли что-то конкретное для моей собственной установки. Для протокола: я на ноутбуке HP OMEN, HTML Help Control версии 10.0, IE для Windows 10 Home v1909.

Kevin Hays 22.12.2020 16:03

@Kevin - даже на ноутбуке, почти свободном от специального программного обеспечения с установленными Windows 10 Home v1909 и IE11, я смог напрямую воспроизвести результат, описанный в моем ответе. Добавил несколько мыслей, что может глючить. Пожалуйста, дайте отзыв на мой **Изменить **. Возможно, вы уже знали все это. Поведение, описанное в FWIW, мне совершенно непонятно.

help-info.de 22.12.2020 19:12

@help-info-de — вне веб-браузера, если я дважды щелкну файл CHM в каталоге «_working», он откроется в приложении «Управление системной справкой» и покажет весь контент в области тела, когда я перемещаюсь по нему. Когда тема доступна для просмотра, если я щелкну правой кнопкой мыши и выберу «свойства», появится адрес (URL), который начинается с «mk@MSITStore:D:\....", я могу скопировать/вставить его в адресную строку IE и страница будет отображаться в IE.

Kevin Hays 22.12.2020 19:32

Страница также открывается путем вставки URL-адреса, который у вас есть в коде веб-страницы «ms-its:D:_working\CHM-example.chm::/garden/garden.htm», однако ни один из этих URL-адресов не работает при попытке загрузка с кнопок веб-страницы. У меня есть файл CHM "разблокирован". Я не вижу в IE предупреждение «Разрешить заблокированное содержимое» при попытке запуска. Первая кнопка предлагает «Сохранить или открыть», но в моем случае следующие две кнопки не работают.

Kevin Hays 22.12.2020 19:35

Только что попробовал отключить McAfee. К сожалению, все еще не работает

Kevin Hays 22.12.2020 19:44

Извините... Я только что нашел проблему. Я запускал страницу в IE, запущенную из редактора скобок. Все кнопки терпят неудачу, когда страница обслуживается из этого редактора. Я просто вышел из редактора и попытался открыть HTML-страницу в IE, щелкнув правой кнопкой мыши и выбрав «открыть с помощью ...», и все кнопки работают, как описано. Может быть, проблема связана с веб-сервером в Brackets? Я ценю ваше время, потраченное на работу над этим @help-info.de. Мне нужно убедиться, что этот код действительно будет работать на устройстве моего клиента. Надеюсь, так и будет.

Kevin Hays 22.12.2020 19:56

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