Каталог решений - Как запустить работу Google Maps в поле HTML формы 1С?

Как запустить работу Google Maps в поле HTML формы 1С?

Как запустить работу Google Maps в поле HTML формы 1С?

В наличии

Как справиться с передачей события в поле HTML, если надо передать данные.
Переход на новую версию Google Maps.

Категория:

Описание

Как запустить работу Google Maps в поле HTML формы 1С?

При изменении версии на новую Google Maps перестала работать обработка 1С, которая отображала карту через HTML поле в InternetExplorer 9.

Как программисту  на JavaScript и 1C эта работа досталась мне.

Как положено в новых браузерах, сделал код вызова события

window.sendEvent = function(eventName, eventData)
{
    var e = document.createEvent('Event');
    e.initEvent('onhelp', false, true); 
    e. eventName = eventName;
    e. eventData= eventData;
    document.dispatchEvent(e);
    return e;
}

 Но этот код никак не хотел выдавать событие onHelp в 1С.

Даже добавил в реестре HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_EMULATION вызов 11 версии IE.  Этот способ меняет настройки встроенного браузера. Никакого результата. 

Тогда переключил режим браузера в IE10,

<meta http-equiv=""X-UA-Compatible"" content=""IE=10"">

И тогда старый код стал выдавать событие, и заработала карта.

Но надо было решить задачу передачи данных через поля объекта в 1С. Эти поля упорно не передавались. Они просто обрезались при передаче.

Тогда обратил внимание на стандартное поле data , и о радость, data  передавалось в событие onHelp  и вылавливалось обработчиком событий 1С.

Но data было строковым, а мне требовался объект. Посмотрев еще, обнаружил что кроме data в событие передавалось поле dataFld. И оно тоже было строковым. 

Я решил использовать сериализацию, то есть превращение объекта в строку, а потом строки в объект  и  передал таким образом объект  в обработчик события.

Полученный код:

Вначале, в теге <title> надо переключить браузер в режим IE 10 (В IE 9 режиме не работает карта, в IE 11 режиме не работают события):

|<meta http-equiv=""X-UA-Compatible"" content=""IE=10"">

Вызов события с передачей данных из поля HTML в обработчик 1С.  

|window.sendEvent = function(eventName, eventData)
|{
|             var e = document.createEventObject();
|             //var e = document.createEvent('Event');
|             //e.initEvent('onhelp', false, true);
|             e.data = eventName;
|             e.dataFld = JSON.stringify(eventData);
|             //document.dispatchEvent(e);
|             document.body.fireEvent('onhelp', e);
|             return e;
|}

Код обработчика onHelp

Процедура ПолеHTMLДокonhelp(Элемент, e)
    if (e.data="map.ready") then
        Сообщить("Карта готова");
        КартаГотова();
    endif;
   
    if (e.data="message") then
        Сообщить(e.dataFld);
    endif;               

    if (e.data="info.open") then
        eventData=jsonПрочитатьПлатформой(e.dataFld);
        ОписаниеАдресатовДляДома = ПолучитьОписаниеАдресатовПоАдресуДому(eventData.Получить("address"));
        ОписаниеАдресатовДляДома = eventData.Получить("address") + "<br>"+ОписаниеАдресатовДляДома;
        ЭлементыФормы.ПолеHTMLДок.Документ.parentWindow.setInfoWindowContent(ОписаниеАдресатовДляДома);
    endif;
КонецПроцедуры

 

Сервисные функции для обработки JSON на 1С,( взято отсюда //sale.itcity.ru/public/551972/) :

Функция jsonПрочитатьПлатформой(Значение)

    ЧтениеJSON = Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(Значение);   

    Результат = Неопределено;
    СформироватьДерево(ЧтениеJSON, Результат);
    ЧтениеJSON.Закрыть(); 

    Возврат Результат;
КонецФункции


Процедура СформироватьДерево(ЧтениеJSON, Дерево)   

    ИмяСвойства = Неопределено;   

    Пока ЧтениеJSON.Прочитать() Цикл
        TипJSON = ЧтениеJSON.ТипТекущегоЗначения;        

        Если TипJSON = ТипЗначенияJSON.НачалоОбъекта
        ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
            НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);        

            Если ТипЗнч(Дерево) = Тип("Массив") Тогда
                Дерево.Добавить(НовыйОбъект);
            ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
                Дерево.Вставить(ИмяСвойства, НовыйОбъект);
            КонецЕсли;          

            СформироватьДерево(ЧтениеJSON, НовыйОбъект);           

            Если Дерево = Неопределено Тогда
                Дерево = НовыйОбъект;
            КонецЕсли;
        ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
            ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
        ИначеЕсли TипJSON = ТипЗначенияJSON.Число
        ИЛИ TипJSON = ТипЗначенияJSON.Строка
        ИЛИ TипJSON = ТипЗначенияJSON.Булево
        ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
            Если ТипЗнч(Дерево) = Тип("Массив") Тогда
                Дерево.Добавить(ЧтениеJSON.ТекущееЗначение);
            ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") Тогда
                Дерево.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
            КонецЕсли;
        Иначе
            Возврат;
        КонецЕсли;
    КонецЦикла;   

КонецПроцедуры

 

has been added to your cart:
Оформление заказа