Запуск JavaScript в 1С

1. zhan.87 21.11.16 07:57 Сейчас в теме
Здравствуйте.

Создана в управляемой форме обработка, которая содержит форму и макет. На форме размещена кнопка и объект с типом HTML-документ. Далее текст страницы копируется из макета в объект.

<HTML><HEAD>
</HEAD><BODY>
<P>Начало документа...</P>
<sc ript type="text/javascript">
   function zako() {
    return alert( 'привет, мир!' ); } 
    </SC RIPT> 
<P>...Конец документа</P>
</BODY></HTML>
Показать


Подскажите как вызвать скрипт zako из 1С?

Внешнюю обработку прилагаю

Примеры из 8.2 не работают, потому что в объекте нет свойства "документ", через который вызывается скрипт.
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. zhan.87 21.11.16 08:25 Сейчас в теме
Здравствуйте.

Создана в управляемой форме обработка, которая содержит форму и макет. На форме размещена кнопка и объект с типом HTML-документ. Далее текст страницы копируется из макета в объект.

<HT ML><HEAD>
</HEAD><BODY>
<P>Начало документа...</P>
<sc ript type="text/javascript">
function zako() {
return alert( 'привет, мир!' ); }
</SC RIPT>
<P>...Конец документа</P>
</BODY></HTML>

Подскажите как вызвать скрипт zako из 1С?

Внешнюю обработку прилагаю

Примеры из 8.2 не работают, потому что в объекте нет свойства "документ", через который вызывается скрипт.

+
3. zhan.87 21.11.16 10:46 Сейчас в теме
есть профессионалы на форуме?
+
5. fromtomike 48 21.11.16 11:50 Сейчас в теме

(3)
Сорри, так:

	Документ = Элементы.ДокументHTML.Документ;
	Документ.parentWindow.zako();

+
4. fromtomike 48 21.11.16 11:48 Сейчас в теме
А так:

	Документ = Элементы.ДокументHTML.Документ;
	Документ.parentWindow.zako(ЭтаФорма);

+
6. cold_mount 1 21.11.16 19:21 Сейчас в теме
пример рабочего кода

<!DO CTYPE html> 
<ht ml> 
<head> 
<met a charset="utf-8"> 
<st yle type="text/css"> 
#shape_prop{ 
display: none; 
} 

#output_xml{ 
height: 100px; 
width: 900px; 
} 
</style> 
<sc ript type="text/javascript"> 
function ShapePainter(){ 
alert("Тест")} 
</sc ript> 
<sc ript type="text/javascript"> 
function ShapePainter1(){ 
alert("Тест")} 
</sc ript> 
<sc ript type="text/javascript"> 
function ShapePainter2(){ 
alert("Тест")} 
</sc ript> 
<sc ript type="text/javascript"> 
function SetB(imagister){ 
alert(imagister); 
} 
</sc ript> 

</head> 
<body> 
<sc ript type="text/javascript"> 
function SetB1(imagister){ 
alert(imagister); 
} 
</sc ript>
Показать
+
7. zhan.87 22.11.16 05:52 Сейчас в теме
(6) здравствуйте Олег Суфиянов! Вы забыли прикрепить код в 1С для вызова скрипта SetB1, как и просилось в задаче.
+
8. fromtomike 48 22.11.16 10:48 Сейчас в теме
В примере два направления вызова

javascript -> 1С
1С -> javascript


// Инициализирум текст скрипта
// "Текст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. zhan.87 22.11.16 14:19 Сейчас в теме
(8) Имя Михаил,
Документ = Элементы.ДокументHTML.Документ;

В ДокументHTML это объект с отображением HTML и у него нет свойства Документ.
+
11. fromtomike 48 22.11.16 14:43 Сейчас в теме
(10)Код взят из реальной обработки, в 8.3 работает.

1. Да, в свойствах изначально его нет, но после присвоения текста скрипта и открытия формы оно появляется (в момент отработки встроенного обработчика "ДокументСформирован" для поля HTML документа)

2. И этот объект имеет тип COMОбъект, т.е. связан с объектной моделью скрипта


Прикрепленные файлы:
+
12. fromtomike 48 22.11.16 14:49 Сейчас в теме
(11)Собственно вот:
Прикрепленные файлы:
ТекстHTML_Пример.epf
user1188623; lich13; +2
14. zhan.87 23.11.16 05:48 Сейчас в теме
(11) Имя Михаил, здравствуйте! Спасибо большое! Обработка рабочая! Вы профессионал 1С! :-)
+
9. zhan.87 22.11.16 14:19 Сейчас в теме
Имя Михаил,
Документ = Элементы.ДокументHTML.Документ;

В ДокументHTML это объект с отображением HTML и у него нет свойства Документ.
+
13. v3rter 22.11.16 15:06 Сейчас в теме
15. Mopo3 331 25.09.18 13:49 Сейчас в теме
Коллеги, подскажите пожалуйста кто сталкивался со следующем проблемой.
На некоторых сайтах, например ya.ru, parentWindow недоступен.
1. Это потому что сайт https ?
2. Как обойти эту ситуацию, чтобы получить доступ к parentWindow, ну или хотя бы другому объекту, чтобы можно было выполнить произвольный код JS, аналогично как в parentWindow.eval() ?
+
16. Mopo3 331 25.09.18 22:38 Сейчас в теме
Сам спросил, сам отвечаю)
В общем мне добраться до parentWindow так и не удалось.
Но все равно можно выполнить любой JS скрипт, если сделать примерно как описано в https://infostart.ru/public/338126/
То есть через js размещаем на форме кнопку, вешаем на нее событие и привязываем к коду JS, нажимаем кнопку через JS.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот