|
WebKit - Вызов функций 1С из ПоляHTML через JS. WebKit (8.3.15) | ☑ | ||
---|---|---|---|---|
0
Jimmo910
19.09.19
✎
16:48
|
Подскажите, может кто уже реализовывал на новой платформе.
Есть произвольная HTML страничка, содержащия какие-нибудь кнопки или ссылки. Нужно что бы по этим кнопкам/ссылкам вызывались функции 1С написанные в то й же форме где и размещено HTML Поле. &НаКлиенте Процедура КомандаВыполнить(Отказ) ЭтаФорма.Элементы.Поле1.Документ.SetForm1C (ЭтаФорма); КонецПроцедуры &НаКлиенте Функция СобытиеНТМЛ (Параметр1) Экспорт Сообщить (Параметр1); КонецФункции &НаКлиенте Процедура КомандаОтобразить(Команда) Элементы.Поле1.Документ.body.outerHTML = "<html> |<head> |<script> | var xPram1C; |function SetForm1C (Pram1C) |{ | xPram1C = Pram1C; |} | |function Call1C (param1) |{ | xPram1C.СобытиеНТМЛ (""12""); |} | |</script> |</head> | |<body>Тест вызова функции 1С из JS</br /><br /> |<input id='param1' type='text' value='Параметр1' /><br /> |<input type='button' onclick='Call1C(param1.value)' value='Вызов функции в 1С' /> | |</body> |</html>"; КонецПроцедуры |
|||
1
Лефмихалыч
19.09.19
✎
17:17
|
(0) без вариантов
|
|||
2
pyha
19.09.19
✎
17:44
|
Зачем через js это делать? у поля html документа есть событие при нажатии, там в параметре передается имя элемента на котором произошло нажатие, там можно и нужный 1с код написать
|
|||
3
sikuda
20.09.19
✎
15:27
|
(2) Да ДанныеСобытия.Element
|
|||
4
Jimmo910
14.10.19
✎
16:17
|
Нет. Передается "Поле1" - А так как это целая HTML страница на которой может быть 100500 кнопок нужно именно по нажатию на кнопку html вызвать и передать функцию 1С.
Вот конкретно: html страница с картой Ундекса по карте щелкают и нужно получить координаты щелчка... На самой карте координаты отобразил, а нужно передать их на сторону 1С. ЭлементыФормы.HTMLКарта.УстановитьТекст("<!DOCTYPE html> |<html xmlns=""http://www.w3.org/1999/xhtml""> |<head> | <title>Быстрый старт. Размещение интерактивной карты на странице</title> | <meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" /> | <script src=""https://api-maps.yandex.ru/2.1/?apikey=b74a09e3-3187-4bc7-ac3b-339ad9ef9f9f&lang=ru_RU"" type=""text/javascript""> | </script> | <script type=""text/javascript""> | ymaps.ready(init); | var myMap; | function init(){ | myMap = new ymaps.Map(""map"", { | center: [55.76, 37.64], | zoom: 7 | }); | myMap.geoObjects.add(new ymaps.Placemark([55.790139, 37.814052], { | balloonContent: '', | iconCaption: '' | }, { | preset: 'islands#blueCircleDotIconWithCaption', | iconCaptionMaxWidth: '50' | })); | myMap.container.enterFullscreen(); | myMap.events.add('click', function (e) { | if (!myMap.balloon.isOpen()) { | var coords = e.get('coords'); | myMap.balloon.open(coords, { | contentHeader:'', | contentBody:'<p>Координаты щелчка: ' + [ | coords[0].toPrecision(14), | coords[1].toPrecision(14) | ].join(', ') + '</p>', | contentFooter:'<sup>Щелкните еще раз</sup>' | }); | } | else { | myMap.balloon.close(); | } | }); | } | </script> |</head> | |<body> | <div id=""map"" style=""width: 700px; height: 580px""></div> |</body> | |</html>"); |
|||
5
novichok79
14.10.19
✎
16:24
|
я делал связь с лифлетом на 1С 8.3.15
там надо не Call1C, а класть в div'ы значения в JSON например и потом забирать их из 1С по клику. |
|||
6
Jimmo910
14.10.19
✎
16:34
|
(5) А можно хоть малюсенький примерчик, плиз. =)
|
|||
7
Garykom
гуру
14.10.19
✎
16:38
|
(4) В 1С у ЭлементыФормы.HTMLКарта есть обработчик клика, там можно вызвать функцию JS которая вернет координаты.
|
|||
8
Jimmo910
14.10.19
✎
16:53
|
(7) Можно. Согласен =) А вот как? =)))))
|
|||
9
novichok79
14.10.19
✎
17:13
|
(6) HTML
<!DOCTYPE html> <html> <head> <META content=text/html;charset=utf-8 http-equiv=content-type></META> <meta http-equiv="X-UA-Compatible" content="IE=9" /> <link rel='stylesheet' href='https://unpkg.com/[email protected]/dist/leaflet.css'/> <script src="https://unpkg.com/[email protected]/dist/leaflet.js" integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og==" crossorigin=""></script> <style> body { padding: 0; margin: 0; } html, body, #map { height: 100%; width: 100%; } </style> </head> <body> <div id='map'></div> <script type='text/javascript'> var externalForm = null; var this_webkit = false; var defaultIcon = L.icon({iconUrl:"data:image/PNG;base64,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", iconSize:[25, 41]}); var markerStorage = []; var osmLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{maxZoom:18,}); var map = L.map('map').setView([56.850035, 35.897074], 12); map.addLayer(osmLayer); var featureGroup = L.featureGroup().addTo(map); map.on('click', function(event) { var location = event.latlng; sendTo1C('map.onclick', JSON.stringify(location)); }); function setMapScale(mapScale) { map.setView(map.getCenter(), mapScale); } function getMapCenter() { return JSON.stringify(map.getCenter()); } function sendTo1C(name, data) { if (this_webkit) { document.getElementById('message_key').innerHTML = name; document.getElementById('message_data').innerHTML = data; } else { var evt = document.createEventObject(); evt.propertyName = name; evt.data = data; evt.cancelBubble = true; evt.returnValue = false; document.fireEvent('onclick',evt); }; }; function ClearMarkers() { if (markerStorage != null) { markerStorage.forEach( function(markerData, i, markerStorage) { if (markerData != null) { map.removeLayer(markerData.marker); markerData.marker = null; }; }); markerStorage = []; } } function addMarkerDraggable(markersData) { ClearMarkers(); markersData = JSON.parse(markersData); var markersCount = markersData.length; for (var i = 0; i < markersCount; i++) { incomingData = markersData[i]; marker = L.marker([incomingData.Широта, incomingData.Долгота], {icon:defaultIcon, draggable:true}).bindPopup(incomingData.ПредставлениеАдреса); marker.on('click', function(event) { var markerIndex = markerStorage.map(function(object) { return object.marker; }).indexOf(event.target); if (markerIndex != -1) { sendTo1C('marker.onclick', JSON.stringify(markerStorage[markerIndex].id)); } }); marker.addTo(map); markerStorage.push({marker:marker, id:incomingData.Ссылка}); }; if (markersCount > 0) { map.setView(new L.LatLng(incomingData.Широта, incomingData.Долгота), incomingData.МасштабКарты); } } function setProperty(name, action) { switch (name) { case 'webkit': this_webkit = action=='up' ? true : false; break; default: break; } } </script> <div id='message_key' style='display: none'></div> <div id='message_data' style='display: none'></div> </body> </html> |
|||
10
novichok79
14.10.19
✎
17:16
|
&НаКлиенте
Перем ОкноБраузера &НаКлиенте Процедура БраузерДокументСформирован(Элемент) Если Не КартаЗагружена Тогда КартаЗагружена = Истина; ДокументБраузера = Элемент.Документ; ОкноКарты = ДокументБраузера.parentWindow; Если ОкноКарты = Неопределено Тогда ОкноКарты = ДокументБраузера.defaultView; КонецЕсли; ОкноКарты.externalForm = ЭтаФорма; ОкноКарты.setProperty("webkit", ?(ВерсияПлатформы > 13, "up", "down")); Значение = ОкноКарты.getMapCenter(); Геопозиция = ДесериализоватьJSON(Значение); Если ТипЗнч(Геопозиция) = Тип("Структура") Тогда Если Геопозиция.Свойство("lat") Тогда ТекущаяШирота = Геопозиция.lat; КонецЕсли; Если Геопозиция.Свойство("lng") Тогда ТекущаяДолгота = Геопозиция.lng; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура БраузерПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если КартаЗагружена Тогда Если ВерсияПлатформы > 13 Тогда Ключ = ОкноКарты.Document.getElementById("message_key").innerHTML; Значение = ОкноКарты.Document.getElementById("message_data").innerHTML; ОкноКарты.Document.getElementById("message_key").innerHTML = ""; ОкноКарты.Document.getElementById("message_data").innerHTML = ""; Иначе Ключ = ДанныеСобытия.Event.propertyName; Значение = ДанныеСобытия.Event.data; КонецЕсли; Если Не ПустаяСтрока(Значение) Тогда Значение1С = ДесериализоватьJSON(Значение); Если Ключ = "marker.onclick" И ТипЗнч(Значение1С) = Тип("Строка") И СтрНачинаетсяС(Значение1С, "e1cib/data/") Тогда ПерейтиПоНавигационнойСсылке(Значение1С); ИначеЕсли Ключ = "map.onclick" И ТипЗнч(Значение1С) = Тип("Структура") Тогда Если Значение1С.Свойство("lat") Тогда ТекущаяШирота = Значение1С.lat; КонецЕсли; Если Значение1С.Свойство("lng") Тогда ТекущаяДолгота = Значение1С.lng; КонецЕсли; КонецЕсли; КонецЕсли; Иначе ПоказатьОповещениеПользователя("Внимание", , "Карта не загружена", , СтатусОповещенияПользователя.Важное); КонецЕсли; КонецПроцедуры |
|||
11
novichok79
14.10.19
✎
17:16
|
как-то так
|
|||
12
Jimmo910
22.10.19
✎
12:27
|
Спасибо. разобрался
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |