Расширенная обработка ссылок в теле HTML-документа
Общие сведения
Инфо-Навигатор позволяет выполнять ряд дополнительных действий при обработке страниц HTML, когда пользователь выполняет переход по гиперссылке.
Для выполнения действий с окном Инфо-Навигатора используются команды протокола cmd.
<a href="cmd:new_window">Открыть новое окно</a>
При использовании Инфо-Навигатора в составе программы Инфо-Бухгалтер версии 8 и 10 доступны команды, осуществляющие действия путеводителя.
<a href="ib:menu(Операции:Фильтр)">Фильтр хоз. операций</a>
Протокол cmd.
Поддерживается ряд команд как характерных для любого браузера, так и специфичных для Инфо-Навигатора.
- back - стандартная команда браузера "Назад".
- forward - стандартная команда браузера "Вперед".
- home - стандартная команда браузера "Переход к домашней странице".
- search - стандартная команда браузера "Переход к странице поиска".
- new_window - открыть копию окна Инфо-Навигатора.
Если до выполнения команды еще не было открытого окна Инфо-Навигатора, то создается новое окно со стартовой страницей.
Также можно указать команду для выполнения в новом окне:
cmd:new_window(<команда>)
Например:cmd:new_window(url=http://www.ib.ru)
cmd:new_window(file=platform/idn/index.html)
cmd:new_window(ib10.main)
- content - показать панель "Содержание" Инфо-Навигатора.
- index - показать панель "Указатель" Инфо-Навигатора.
- find_cont - выполнить команду Инфо-Навигатора "Найти текущую страницу в содержании".
- exec - запустить программу, открыть URL в браузере (и прочие задачи, выполняемые при помощи ShellExecute).
Первый аргумент - объект; второй (необязательный) - глагол ShellExecute (например, open (по умолчанию), print, runas итд).
Необязательный третий аргумент задает стартовую папку. Может указываться * для использования папки файла в качестве стартовой.
Если стартовая папка задает относительный путь, то он откладывается от пути текущей страницы.
Если объект - URL, то он используется без изменений; если путь, то он откладывается от пути текущей страницы (при условии, что эта страница локальная).
cmd:exec(<объект> [, <глагол> [, <стартовая папка> или * ]])
Для файлов поддерживается псевдо-глагол show_in_explorer, при указании которого вместо вызова ShellExecute происходит показ файла в Проводнике. - setvar - установить значение переменной Инфо-Навигатора. Первый аргумент - имя переменной, второй - значение.
- invoke - вызвать встроенную функцию Инфо-Навигатора.
cmd:invoke:<имя функции>(<параметры>)
Результат выполнения функции заносится в атрибут data-invoke_result элемента body текущего документа. Поддерживаются следующие встроенные функции:- exists - проверка существования папки или файла. Проверка выполняется только в случае, когда URL текущей страницы является файловым. В качестве параметра указывается относительный путь к папке или файлу.
Например:cmd:invoke:exists(../../optional/first/index.html)
Результат проверки заносится в атрибут data-invoke_result в виде true или false.
- exists - проверка существования папки или файла. Проверка выполняется только в случае, когда URL текущей страницы является файловым. В качестве параметра указывается относительный путь к папке или файлу.
Пример.
<a href="cmd:find_cont">Показать эту страницу в содержании</a>
<a href="cmd:exec(http://ib.ru/)">Открыть сайт разработчика</a>
<a href="cmd:exec(subdir\some_utility.exe,runas,*)">Запустить утилиту от имени администратора</a> <a href="cmd:exec(subdir\program.exe,,workdir)">Запустить программу</a> <a href="cmd:exec(somewhere\myfile.txt,show_in_explorer)">Перейти к расположению файла</a>
<a href="cmd:setvar(likethis,true)">Мне нравится</a>
Если страницу HTML планируется просматривать не только в Инфо-Навигаторе, но и в других браузерах, то ссылки с использованием протокола cmd можно удалить, используя javascript. Для определения того, что страница просматривается с помощью Инфо-Навигатора можно проверять значение атрибута элемента body data-cmd_receiver. Инфо-Навигатор задает значение атрибута равное IDN.
Протоколы, задаваемые приложением.
Инфо-Навигатор может работать в составе приложения (в качестве библиотеки DLL) и выполнять функции специфические для этого приложения. Эта возможность используется для реализации путеводителя, т.е. выполнения действий программы при нажатии гиперссылок на странице HTML.
Для работы страниц HTML вне приложения, поддерживающего протокол ссылки, может применяться подмена ссылки с использованием javascript. Для обнаружения работы в контексте приложения используется атрибут элемента body data-insideof.
Пример.
<a href="filter.bmp" data-althref="ib:menu(Операции:Фильтр)">Фильтр</a>
В этом примере ссылка осуществляет переход к картинке filter.bmp, а ссылка с командой протокола ib помещена в атрибут data-althref. Подключенный на странице javascript проверяет атрибут элемента body data-insideof=ib8, чтобы обнаружить режим работы в контексте Инфо-Бухгалтер 8. Если контекст Инфо-Бухгалтер 8 обнаружен, то javascript заменяет значения атрибута href на значения атрибута data-althref для всех ссылок на странице.
Такая техника замены преследует следующие цели:
- Ссылки нормально работают в любых браузерах и Инфо-Навигаторе без контекста приложения. Javascript ничего не заменяет и происходит переход на картинку-screenshot или соответствующий раздел контекстной справки.
- При работе в требуемом контексте приложения javascript заменяет ссылки. Вместо картинки или описания действия программы вызывается само действие.
Инфо-Бухгалтер 8 устанавливает атрибут элемента body data-insideof=ib8 и поддерживает команды протокола ib для окна путеводителя. Описание команд протокола ib в контексте Инфо-Бухгалтер 8 указано в функции ПУТЕВОДИТЕЛЬ.
Инфо-Бухгалтер 10 устанавливает атрибут элемента body data-insideof=ib10 и поддерживает команды протокола ib для окна путеводителя. Команды протокола ib в Инфо-Бухгалтер 10 отличаются от команд одноименного протокола в Инфо-Бухгалтер 8. Подробнее о командах протокола ib в Инфо-Бухгалтер 10 см. здесь. В среде разработки И++ используется отдельная справочная система с возможностями путеводителя. Среда разработки устанавливает атрибут элемента body data-insideof=ippide и поддерживает команды протокола ippide.
Переменные Инфо-Навигатора.
Инфо-Навигатор поддерживает установку и хранение значений переменных в контексте сессии своего использования. Установка значения переменной может быть выполнена с помощью команды cmd:setvar(<имя>,<значение>). Также Инфо-Бухгалтер может программно устанавливать и считывать значения переменных для справки и путеводителя.
При загрузке страницы Инфо-Навигатор помещает текущие значения переменных в виде атрибутов элемента body data-idn_var_<имя переменной>. Например, переменной likethis будет соответствовать имя атрибута data-idn_var_likethis. Подключенные к странице скрипты могут проверить наличие интересующих их переменных, получить их значения и выполнить соответствующую обработку.
В частности, переменные Инфо-Навигатора могут использоваться для управления значениями опций (элемент input, у которого type="checkbox"). Начальное значение опции может быть установлено при загрузке страницы на основании атрибутов элемента body. При переключении опции (событие onclick) значение соответствующей переменной может быть изменено с помощью команды установки переменной:
<script> function toggleCheckbox(checkbox) { window.location.href = "cmd:setvar(" + checkbox.id + "," + checkbox.checked + ")"; } </script>
В примере в качестве имени переменной используется id опции, а значение определяется атрибутом checked, равным "true" или "false".
Встроенные функции Инфо-Навигатора.
Инфо-Навигатор позволяет выполнять некоторые действия, недоступные из скриптов. Вызов встроенной функции осуществляется с помощью команды cmd:invoke:<имя функции>(<параметры>). Результат выполнения функции заносится в атрибут data-invoke_result элемента body текущего документа.
<script> function optionalFileExists(filepath) { window.location.href = "cmd:invoke:exists(" + filepath + ")"; var attr = document.body.getAttribute("data-invoke_result") if (attr == null) return false; return (attr == "true"); } </script>
См также: