Здесь есть много сообщений на эту тему, но ни одно из них не является решением для запуска файла справки CHM с веб-страницы.
Фон:
Путь к файлу 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 — верно? У меня много проблем к сожалению.
Вот мой код 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 с веб-страницы хостинга. Любая помощь очень ценится!
Краткая история - используйте полный путь при поиске внутри файла 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 секунд из соображений безопасности.
@Kevin - я попробую свой собственный ответ с нуля позже.
Первая кнопка ведет себя точно так же, как и все мои предыдущие тесты: браузер предлагает открыть или сохранить файл, а выбор «Открыть» запускает CHM в приложении для просмотра справки, но не показывает содержимое в основной области — он просто показывает иерархию CHM. файл. Две другие кнопки вообще не запускают файл CHM, хотя объединенные строки выглядят правильно в предупреждении и в инспекторе IE.
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 - даже на ноутбуке, почти свободном от специального программного обеспечения с установленными Windows 10 Home v1909 и IE11, я смог напрямую воспроизвести результат, описанный в моем ответе. Добавил несколько мыслей, что может глючить. Пожалуйста, дайте отзыв на мой **Изменить **. Возможно, вы уже знали все это. Поведение, описанное в FWIW, мне совершенно непонятно.
@help-info-de — вне веб-браузера, если я дважды щелкну файл CHM в каталоге «_working», он откроется в приложении «Управление системной справкой» и покажет весь контент в области тела, когда я перемещаюсь по нему. Когда тема доступна для просмотра, если я щелкну правой кнопкой мыши и выберу «свойства», появится адрес (URL), который начинается с «mk@MSITStore:D:\....", я могу скопировать/вставить его в адресную строку IE и страница будет отображаться в IE.
Страница также открывается путем вставки URL-адреса, который у вас есть в коде веб-страницы «ms-its:D:_working\CHM-example.chm::/garden/garden.htm», однако ни один из этих URL-адресов не работает при попытке загрузка с кнопок веб-страницы. У меня есть файл CHM "разблокирован". Я не вижу в IE предупреждение «Разрешить заблокированное содержимое» при попытке запуска. Первая кнопка предлагает «Сохранить или открыть», но в моем случае следующие две кнопки не работают.
Только что попробовал отключить McAfee. К сожалению, все еще не работает
Извините... Я только что нашел проблему. Я запускал страницу в IE, запущенную из редактора скобок. Все кнопки терпят неудачу, когда страница обслуживается из этого редактора. Я просто вышел из редактора и попытался открыть HTML-страницу в IE, щелкнув правой кнопкой мыши и выбрав «открыть с помощью ...», и все кнопки работают, как описано. Может быть, проблема связана с веб-сервером в Brackets? Я ценю ваше время, потраченное на работу над этим @help-info.de. Мне нужно убедиться, что этот код действительно будет работать на устройстве моего клиента. Надеюсь, так и будет.
Извините за задержку. Спасибо за информацию. Ни один из этих трех вариантов не работает для меня, и я не уверен, почему. Я создал каталог «_working» на диске D: и поместил в него ваш CHM-файл. Я также создал тестовый HTML-файл в том же каталоге, скопировав/вставив в него ваш код.