gifts2017

Встроенный браузер в 1С. Можно и "Такси" внутри 8.2

Опубликовал Сергей Кудашкин (sikuda) в раздел Обмен - Интеграция с WEB

Скриптов много сделано в интернете для браузерных движков, а в 1С есть и ПолеHTML документа. Что все не так просто, понимает каждый, но в Winodws 7 уже по умолчанию Internet browser 10 и 11 в релизе.  Значит, стоит копать. Идея первая - простой браузер.

 

Доброго времени суток!

Впервые увидев ПолеHTML документа в обычном приложении, можно подумать, что это полноценный браузер в 1С. Что-то подсказывает, что нет.

 

Проверим, что нам напишет по поводу браузера простая проверка или, точнее, user agent (ИнформацияПрограммыПросмотра) в Windows:

  1. Локальная машина - Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
  2. Толстый клиент - Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
  3. Тонкий клиент - Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
  4. Web-клиент - Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Без комментариев, что-то третий пункт явно хромает.

Насчет пункта 4 тоже не стоит себя обольщать. В IE есть режим совместимости со старыми версиями. Так вот web-клиент 1С в IE работает только  в данном режиме (http://sikuda.ru/?p=168). Ахилесова пята 1С. Будем надеется, что в 8.4 дело сдвинется с мертвой точки.

Пробуем написать простой браузер для толстого клиента. И начнем тестировать. Введем  v8.1c.ru и Инфостарт не выдают ошибок...

Залезаем в документацию 1C толстого клиента: Описание объекта, в целом, определяется стандартом World Wide Web Consortium (W3C) Document Object Model (DOM) Level 1 (http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/) Но, объект имеет особенности, связанные с реализацией. ПолеHTMLДокумента реализовано с использованием WebBrowser Control http://msdn.microsoft.com/en-us/library/aa752040(VS.85).aspx Тип свойства документ соотвествует типу HTMLDocument http://msdn.microsoft.com/en-us/library/ms531073(VS.85).aspx. Вот где здесь точно собака порылась...

Кто любит аналоги с исходными кодами – отсылаю в примеры Qt: http://doc.qt.io/qt-5/activeqt-activeqt-webbrowser-example.html

Ошибки это плохо. Сделаем новую форму ФормаОбычнаяActivеX. И вставим туда ActiveX элемент Browser. Немного поколдуем с кнопками, что выглядело как в первоначальной форме. Запускаем www.1c.ru баз, опять ошибка. Нет ну так не пойдет. По логике интернет программирования, есть есть ошибка она просто что-то не делает, а не напрягает пользователя. Поэтому отыскиваем в нашем объекте свойство Silent и устанавливаем его в Истина. Ура! Момент истины, www.1c.ru открывается без ошибок. Поставим эту форму по умолчанию. И посмотрим на версию движка: "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)" - а он тот-же старый.

В бета версии 8.3 на Linux предварительно все хорошо. Но там сразу понятно, что это webkit (libwebkitgtk-1.0-0). Доработанность решений 1С с ним это я думаю процесс долгий.

Теперь займемся тонким клиентом. Здесь у нас есть только свойство Данные типа строка, типа текст страницы. Посмотрим как это сделано в типовых конфигурациях. Внутренние ссылки работают, а внешние вызываются по ПерейтиПоСсылке во внешнем браузере. Что это значит, это не облом, это философия такая.И разумное объяснение может упирается в безопасность и рабоспособность старого движка, а не разумное в маркетинг (Наш тонкий клиент круче чем все вэб-браузеры мира...). Но даже по безопасности видна явная дырка. Скрипты на странице работают, если их загрузить отдельно и даже если их загружать на странице стандартным способом.

Идея для браузера оказалось очень простой. Подсунем начальную страницу, которая автоматически перешлет нас на необходимый ресурс. Как это сделать? По стандартам прописать тэг на странице: META HTTP-EQUIV="REFRESH" CONTENT="0;URL=http://v8.1c.ru". Поле начинает жить своей жизнью. Я чуствую одним местом, что это очень плохо в плане безопасности. Но оставим этот вопрос в компетенции самой фирмы 1С. Я думаю после перехода на БП 3.0 вопрос может стать актуальным.

Работоспособная обработка выложена. Поставим начальную страницу http://v8.1c.ru/overview/Platform.htm, чтобы сразу не ругался. Скачивайте и наслаждайтесь. Даже можно запустить демо 8.3 внутри тонкого клиента 8.2, просто зайдите внутри браузера на http://platform.demo.1c.ru/demo83/.


Добавим в поле HTML в режим совместимости с последней версией. Количество ошибок уменьшиться.

<meta http-equiv='X-UA-Compatible' content='IE=Edge'>

Но данный способ тоже не идеальный и не спасает от всех ошибок в барузере. В частности Infostart.ru


И самая последняя новость в 1С 8.4 ничего не изменилось. Стабильность наше все...


P.S. Сайт: sikuda.ru

И продолжение статьи

http://sikuda.ru/internet-explorer-10-dlya-windows-7-vyishel/

http://sikuda.ru/internet-explorer-11-i-1c-poka-ne-vmeste/

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Браузер в 1С.
.epf 12,27Kb
27.07.15
334
.epf 12,27Kb 334 Скачать
htmlbook.ru (Hack IE7)
.epf 9,35Kb
26.11.13
49
.epf 9,35Kb 49 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. naus (Danil.Potapov) 05.02.13 17:09
для толстого и тонкого клиента есть возможность перевести работу компоненты без эмуляции IE7
http://blogs.msdn.com/b/ie/archive/2009/03/10/more-ie8-extensibility-improvements.aspx

у себя сделал 1cv8.exe 1f40 и 1cv8c.exe 1f40 в HKCU.
migele; Asdam; masenshi; vlad.frost; +4 1 Ответить 4
2. Яков Коган (Yashazz) 06.02.13 11:35
*торможу
А что в обработке-то? Обычное ПолеHTMLДокумента, или настоящий браузер типа IE9?
3. Сергей Кудашкин (sikuda) 06.02.13 12:19
(2) Там внутри обычное ПолеHTMLДокумента(если надо пишите). Меня заинтересовал вопрос насколько работоспособный этот движок для собственных нужд. Если есть что интересное по этому - пишите.
4. Tsaregorodtsev (TSSV) 06.02.13 13:04
Интересна будет реализация для тонкого клиента.
5. Павел Фирсов (Paul_NN) 07.02.13 14:08
Здравствуйте, результаты поиска в яндексе, открываются в ИЕ а не в окне 1С браузера. Можно поправить?
6. Сергей Кудашкин (sikuda) 07.02.13 14:47
(5) Пока с тонким клиентом только начал заниматься...
А обычные формы у меня поиск в яндексе открывает(Win7 x64, IE9). Какая у Вас машина?
7. Яков Коган (Yashazz) 08.02.13 11:43
(3) Уж не знаю, кем там он представляется, этот обёрнутый браузер, но судя по возможностям, это IE7 и не выше. Многие js-конструкции, появившиеся позже, он не поддерживает. Кроме того, что интересно: хотя в документации не рекомендуется использовать свойство parentWindow, оно везде нормально работает, где только доводилось, и не знаю, с чем связано это предупреждение.
8. Сергей Кудашкин (sikuda) 13.02.13 11:25
Заходите на сайт sikuda.ru. Комментируйте статью.
9. Сергей Кудашкин (sikuda) 06.06.13 10:24
Сделал браузер как есть в тонком клиенте по просьбам трудящихся.
10. Сергей Кудашкин (sikuda) 23.08.13 11:09
Доделал. В новой 8.3.3.687 сделал без серверных вызовов и развел реализация для ТонкогоКлиента и остальных.
(5) Понял, это фича браузерного движка 1С.
11. Роман Цованян (pfihr) 11.11.13 12:58
12. Сергей Кудашкин (sikuda) 12.11.13 10:05
(1) По мне так плохо и IE7 и IE8.
(11) В IE10 1C 8.3.4 наконец-то стало (meta http-equiv="X-UA-Compatible" content="IE=edge")
Но у меня тонкий клиент выдает старый useragent и зеленый цвет в http://htmlbook.ru/content/khaki-dlya-ie7. В 1С так просто лучше отработано.
13. Роман Цованян (pfihr) 13.11.13 10:28
Не все так просто:) Как оказалось, во-первых, скрипты в HTML поле выполняются два раза, когда присваиваешь, и когда меняется отображение на форме. Во-вторых, в первый раз отображается нормальный useragent, а во второй - от IE7, но при этом сам рендер происходит от Edge (10 например).
14. Сергей Кудашкин (sikuda) 13.11.13 14:11
(13) pfihr,
Инициализация два раза это факт.
У меня users agent одинаковый Mozilla/4.0 (compatible; MSIE 7.0...
Фразу "сам рендер происходит от Edge" не понял. Скорее всего 1С пользуется движком встроенным с Windows. То есть установленным IE. Но принудительно его переводит в совместимость IE7, так как ее компоненты пока не отработаны для других режимов.
15. Роман Цованян (pfihr) 18.11.13 10:32
А вот скрипт GRaphael запускается только один раз! Надо поэкспериментировать, возможно, второй раз запускаются только каким-то особым образом составленные скрипты, или составленные без использования чего-то.
17. Сергей Артюхов (Serg3141) 30.07.14 11:04
при открытии обработки браузера у меня выходит такая вот ошибка:
{Форма.ФормаОбычнаяActivеX.Форма( 16)}: Поле объекта не обнаружено (ИнтернетСтраница)
ЭлементыФормы.ИнтернетСтраница.Navigate(ОбработкаОбъект.АдресСтраницы);

Запустил в управляемом режиме - при открытии страницы по какой-нибудь ссылке параллельно окну обработки открывается окно с браузером...
18. Сергей Кудашкин (sikuda) 31.07.14 17:46
(17) Serg3141,
по поводу первой ошибки ничего не скажу, не получал.
По поводу второй. Думаю лучше произвольные сайты открывать во внешнем браузер, но текущую ошибку в своей обработке исправил. Сейчас открыват без дополнительного окна.
19. (dr_dom) 12.09.14 12:52
Управляемая форма. Нужно в открывшейся страничке немного подправить HTML код. Как его получить? Спасибо.
20. Сергей Кудашкин (sikuda) 12.09.14 15:51
(19) dr_dom, К сожалею здесь мы не получаем код html, мы делаем перенаправление на другую страницу. Чтобы именно получить код используйте простой метод GET (HTTPСоединение.Получить или подобное)
21. Aleksandr Razuvanov (masenshi) 04.02.15 04:17
(1) naus, У меня такой процесс 1cv8t.exe
Реально теперь определяется как IE8
Также для версии RTM работает значение параметра dword 8888 (Hex: 0x22B8)
22. Сергей Кудашкин (sikuda) 13.03.15 16:09
Поправил ошибки с открытием дополнительного окна браузераю. Проверил в режиме толстого клиента управляемого приложения. Убрал работу в web клиенте(зачем браузер в браузере). Проверил в 8.3.6.1823.
23. Serj (Serj1C) 25.11.15 15:32
Плюс за решение ms web browser + silent
24. Борис Коломин (ПерваяСистема) 09.04.16 18:51
Не подскажите, почему у меня на одном компе яваскприпт в этой обработке работает,, а на другом - нет. В Интернет эксплорере JS работает
25. Сергей Кудашкин (sikuda) 10.04.16 14:24
(24) ПерваяСистема, А какой сайт вы открываете, какие версии IE стоят у Вас на компьютере?
26. Владимир Конырев (Vladimir_Konyrev) 10.05.16 11:01
А для чего файл:

htmlbook.ru (Hack IE7) ?
27. Сергей Кудашкин (sikuda) 10.05.16 12:18
(26) Vladimir_Konyrev, Проверить что движок IE7 без установки совместимости
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа