Создана в управляемой форме обработка, которая содержит форму и макет. На форме размещена кнопка и объект с типом HTML-документ. Далее текст страницы копируется из макета в объект.
Создана в управляемой форме обработка, которая содержит форму и макет. На форме размещена кнопка и объект с типом HTML-документ. Далее текст страницы копируется из макета в объект.
// Инициализирум текст скрипта
// "ТекстHTML" - строковый реквизит формы, с которым связано поле HTML документа
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекстHTML = ПолучитьТекстHTML();
КонецПроцедуры
// Обработчик события "ДокументСформирован" поля HTML документа на форме
// Вызываем функцию javascript из 1С
&НаКлиенте
Процедура ДокументHTMLДокументСформирован(Элемент)
// Инициализируем переменную "Form1C" в javascript контекстом формы 1С
// для возможности вызова функций 1С из javascript
Документ = Элементы.ДокументHTML.Документ;
Документ.parentWindow.SetForm1C(ЭтаФорма);
КонецПроцедуры
// Обработчик команды (кнопки на форме 1С). Вызывает функцию javascript из 1С
&НаКлиенте
Процедура ВызватьСкрипт(Команда)
Документ = Элементы.ДокументHTML.Документ;
Документ.parentWindow.zako(ЭтаФорма);
КонецПроцедуры
// Функция 1С, для вызывов из javascript (по нажатию кнопки "1С" на поле HTML документа)
&НаКлиенте
Функция ВывестиСообщение(ТекстСообщения) Экспорт
Сообщить(ТекстСообщения);
КонецФункции
&НаСервере
Функция ПолучитьТекстHTML()
Текст = "
|<ht ml>
|<head>
|<title>Мой заголовок</title>
|</head>
|<body>
|<sc ript type=""text/javascript"">
|
|var Form1C;
|
|function SetForm1C(aForm1C)
|{
| Form1C = aForm1C;
|};
|
|// Для вызова 1С из скрипта
|function Message1C(MessageText)
|{
| Form1C.ВывестиСообщение(MessageText);
|};
|
|// Для вызова из 1С
|function zako()
|{
| return alert( 'привет, мир!' );
|};
|
|</sc ript>
|
|<!-- А это вызов функции 1С из скрипта /> -->
|<input type = ""button"" on click = ""Message1C('пока, мир!')"" value = ""1С"" />
|
|</body>
|</html>
|";
Возврат Текст;
КонецФункции
(10)Код взят из реальной обработки, в 8.3 работает.
1. Да, в свойствах изначально его нет, но после присвоения текста скрипта и открытия формы оно появляется (в момент отработки встроенного обработчика "ДокументСформирован" для поля HTML документа)
2. И этот объект имеет тип COMОбъект, т.е. связан с объектной моделью скрипта
Коллеги, подскажите пожалуйста кто сталкивался со следующем проблемой.
На некоторых сайтах, например ya.ru, parentWindow недоступен.
1. Это потому что сайт https ?
2. Как обойти эту ситуацию, чтобы получить доступ к parentWindow, ну или хотя бы другому объекту, чтобы можно было выполнить произвольный код JS, аналогично как в parentWindow.eval() ?
Сам спросил, сам отвечаю)
В общем мне добраться до parentWindow так и не удалось.
Но все равно можно выполнить любой JS скрипт, если сделать примерно как описано в https://infostart.ru/public/338126/ То есть через js размещаем на форме кнопку, вешаем на нее событие и привязываем к коду JS, нажимаем кнопку через JS.