Запуск 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 и у него нет свойства Документ.
15. Mopo3 325 25.09.18 13:49 Сейчас в теме
Коллеги, подскажите пожалуйста кто сталкивался со следующем проблемой.
На некоторых сайтах, например ya.ru, parentWindow недоступен.
1. Это потому что сайт https ?
2. Как обойти эту ситуацию, чтобы получить доступ к parentWindow, ну или хотя бы другому объекту, чтобы можно было выполнить произвольный код JS, аналогично как в parentWindow.eval() ?
16. Mopo3 325 25.09.18 22:38 Сейчас в теме
Сам спросил, сам отвечаю)
В общем мне добраться до parentWindow так и не удалось.
Но все равно можно выполнить любой JS скрипт, если сделать примерно как описано в https://infostart.ru/public/338126/
То есть через js размещаем на форме кнопку, вешаем на нее событие и привязываем к коду JS, нажимаем кнопку через JS.
Оставьте свое сообщение
Вакансии
Разработчик 1С (от middle до senior), до 300 К gross
Санкт-Петербург
зарплата от 195 000 руб. до 300 000 руб.
Полный день

Аналитик
Москва
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист 1С
Кемерово
зарплата от 80 000 руб. до 180 000 руб.
Полный день

Разработчик 1С:ERP WE
Москва
зарплата от 250 000 руб.
Полный день