Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Примеры и наработки по использованию WebBrowser ActiveX (число прочтений - 52799 )
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Примеры и наработки по использованию WebBrowser ActiveX
19. Сентября 2011 :: 18:37
Печать  
Открываю новую тему, в которой будем общаться относительно сабжа, как продолжение оффтопной темы http://www.1cpp.ru/forum/YaBB.pl?num=1315559526. Буду сюда скидывать свои наработки по использованию этого "чуда", надеюсь и активисты подтянутся, всё-таки коллективный разум это сила. Улыбка


1. ОС

Ближе к теме. Предыдущая попытка поделиться примером управления DOM-моделью HTML-документа потерпела фиаско по причине того, что Win7 и Win2008 более-менее сносно поддерживают управление узлами прямо из 1С, а вот WinXP и Win2003 можно сказать отвратительно, потому я как-то сразу и не подумал что готовое и работающее на стороне клиентов решение может у кого-то не работать. Далее буду продолжать тему в контексте WinXP, хотя и под более свежими ОС тоже будет работать.

2. DOM

Значит путем экспериментов выяснилось, что управлять нормально DOM напрямую из 1С нельзя, из MSScriptControl.ScriptControl получше но полноценно тоже нельзя, из javascript внутри HTML-документа (или приаттаченого) - управляется практически полноценно. Об этом свидетельствовали веб-страницы с активным содержимым, которые загружались и работали без проблем.

3. Скрипты

Значит нужно вынести весь функционал по управлению DOM в скрипты. Вопрос в том как вызывать эти скрипты, как передавать туда параметры и как возвращать результаты.

3.1. Вызов скриптов

Единственная возможность вызвать скрипты в окне WebBrowser - это через метод ExecScript родительского для WebBrowser объекта parentWindow.

Код
Выбрать все
Браузер.Объект.document.parentWindow.ExecScript(ТекстСкрипта,"JavaScript")
 



Оно работает, но есть одна фича которую нужно иметь ввиду: ExecScript - асинхронный метод, то есть управление в модуль 1С возвращается сразу после вызова скрипта, а не после его выполнения. А вот управление в форму не возращается, так что эта асинхронность как собаке пятая нога - только мешает. Но работать можно, только иметь ввиду данный факт при написании программ, чтобы не искать подолгу ошибки. В приведенном примере я специально расставил сообщения с _GetPerformanceCounter(), чтобы вы наглядно могли увидеть в каком порядке это происходит.

3.2. Передача параметров в скрипт

Так как ExecScript принимает в качестве параметра только строку, мы не можем передать в скрипт объекты напрямую, как в случае с MSScriptControl.ScriptControl.

Вы можете попробовать воспользоватся медом "Сериализовать" из класса "Система" 1С++, но вряд ли у вас выйдет что-то стабильное. Я попробовал, с одной стороны оно работает до поры до времени, с другой стороны асинхронность ExecScript приводит к тому что в какой-то момент по клику пользователя экземпляр "Системы" не готов вернуть объект и сначала скрипт выдает ошибку, а затем вываливается 1С. Если все-таки удастся решить эту проблему, я буду очень признателен.

А на данный момент можно либо усложнить себе жизнь, конвертируя объекты в JSON и обратно (еще поискать надо чем), либо просто конвертировать объекты в строку. ТЗ и списки конвертируются в строку с разделителями и в скрипте разворачиваются в виде массива (одномерного, двумерных в javascript нету, но это не очень мешает). В примере как раз реализована свертка и развертка двумерной ТЗ с помощью строки с разделителями. Работает стабильно.

3.2. Возврат результатов из скрипта, перехват событий

У нас есть один простой и надежный метод перехватывать события из WebBrowser - это событие BeforeNavigate2. В нем мы можем перехватить ссылку, по которой переходит пользователь, отменить переход, а взамен наделать кучу гадостей. Улыбка В ссылку можно запихнуть тоже довольно много, если этого будет мало - то придется обратиться к методу POST, куда можно засунуть на порядок больше. Но обычно из скрипта много передавать и не приходиться - идентификатор какой-нибудь, значение введенное в поле, наименование действия и т.д., а что еще?

Но с событием BeforeNavigate2 есть неприятные тонкости: возникает оно программно из скрипта, обрабатываем мы его тоже программно, и 1С не обновляет WebBrowser до тех пор пока обработка не завершиться. Ну скажем нельзя в окне браузера выводить прогресс-бар по мере добавления строк в таблицу, статус-текст и т.п. Из этой ситуации можно выкрутиться следующим образом - в обработчике события BeforeNavigate2 мы генерируем новое событие через класс "Сервис" FormEx, управление кратковременно передается в форму, потом в предопределенной процедуре формы "ОбработкаВнешнегоСобытия" мы уже выполняем действия над WebBrowser. В примере доступно показано как это делается.

Но даже когда мы меняем содержимое WebBrowser из обработчика внешнего события (а меняем мы его запуском скрипта), окно браузера не обновиться до тех пор пока не закончиться скрипт. Поэтому при разработке программ учитывайте, что лучше 1000 раз в цикле вызвать функцию скрипта, добавляющую одну строку, чем 1 раз вызвать функцию скрипта, добавляющую разом 1000 строк. В первом случае окно будет обновляться сразу после добавления каждой строки, а во втором только после того как всё выведется. Визуально первый вариант намного предпочтительнее. Зато второй быстрее.
« Последняя редакция: 20. Сентября 2011 :: 07:47 - maljaev »  

_______005.rar ( 10 KB | Загрузки )
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #1 - 19. Сентября 2011 :: 18:38
Печать  
4. Контрол

На форме контрол всегда выводится с 3D-рамкой, способов убрать ее ни средствами объекта WebBrowser, ни средствами HTML/javascript не существует. Но есть обходной путь - смотрите в примере процедуру "ВыровнятьРеквизиты", результат - рамку контролу мы вообще убираем, а если оно нам надо - то обводим его картинкой с прозрачнымм фоном, у которой уже устанавливаем необходимую рамку (например простую как в примере).

5. HTML

По умолчанию в окне WebBrowser всегда выводится вертикальная полоса прокрутки, даже если она не нужна. Убрать ее можно, установив в CSS стиль:

Код
Выбрать все
html {overflow:auto;}
 



Это уберет скроллы до тех пор, пока они действительно не понадобятся. Если поставить overflow:none, то вообще скроллов не будет, тут надо либо создавать элементы со скроллами (например DIV), либо разруливать ситуацию самостоятельно с помощью скриптов или стилей.



Еще одна фича в том, что в WebBrowser (старых версий) не пашет метод getElementsByClassName, поэтому эмулируем его одноименной функцией (есть в примере).



Выполнить переход по ссылке (который мы потом ловим) можно либо в теге <a href="....">, либо в скрипте location.href="....." (есть в примере), или сразу по событию скажем onmouseover="location.href='.....'".



В примере я показал, как можно иметь в странице исходный шаблон, из которого мы выдираем нужные элементы и заполняем страницу. Этот подход удобен тем, что для изменения шаблона нам достаточно открыть ту же страницу скажем в Dreamweaver, визуально наблюдая внести коррективы в теги и стили и сохранить обратно.

6. Прочее

Для тех, кто будет пытаться использовать "Сериализовать", есть еще одна фича - при попытке развернуть объект в скрипте будет выдаваться исключение браузера, чтобы этого не происходило - нужно в свойствах обозревателя в настройках безопасности для интранет-узлов сначала выставить самый низкий уровень безопасности, а затем открыть расширенные настройки и включить галку "Использование элементов управления ActiveX, не помеченных как безопасные для использования". На IE7 не знаю, а вот на IE8 и IE9 точно. Как бы еще один минус в пользу этого метода, ведь не будешь заставлять клиента делать это.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #2 - 20. Сентября 2011 :: 00:38
Печать  
Интерактивный фоновый отчет по документам

А вот наклепал я практически рабочий отчет, который в фоне выводит список всех документов базы. Можно при этом спокойно работать с другими окнами, можно щелкать по строкам формирующейся таблицы, прокручивать ее. А отчет всё формируется и формируется... Кому не понятен принцип получения/вывода данных - объясню позже, очень устал... Печаль

P.S. Примеры делал без гламурных красот типа картинок и прочего - эту хрень за 10 минут добавить можно если надо, в отличие от алгоритма.
  

_____________002.rar ( 14 KB | Загрузки )
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #3 - 20. Сентября 2011 :: 01:19
Печать  
Супер! Особенно прмиер журнала!
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #4 - 20. Сентября 2011 :: 07:15
Печать  
Dmitry The Wing писал(а) 20. Сентября 2011 :: 01:19:
Супер! Особенно прмиер журнала!


+1

Вот с этим 3.2. Передача параметров в скрипт можно паработать.
Пример можешь подготовить, когда это невозможно сделать, чтоб ошибка выдавалась. Я посмотрю.
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #5 - 20. Сентября 2011 :: 10:12
Печать  
Ага.. примерчик зачетный.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #6 - 20. Сентября 2011 :: 10:31
Печать  
chessman писал(а) 20. Сентября 2011 :: 07:15:
[quote author=Wing link=1316457428/0#3 date=1316481542]Супер! Вот с этим 3.2. Передача параметров в скрипт можно паработать.
Пример можешь подготовить, когда это невозможно сделать, чтоб ошибка выдавалась. Я посмотрю.

Стёр я его, перепишу снова как время будет.

Общий смысл такой: объект "Система" объявлен в модуле, при клике в веб-форме мы формируем в 1С таблицу значений, сериализуем ее и передаем в скрипт, где происходит ее развертка. Так вот если не ждать 1-2 секунды пока таблица в скрипте обратно развернется и выведется, а упорно продолжать тыкать по кнопке "Добавить таблицу", то где-то на 10-15 тыке управление успевает получить 1С до того, как скрипт закончит работать с очередным экземпляром, и получается что новая таблица только еще сериализуется, а скрипт продолжает работать с предыдущим экземпляром (объект "Система"-то один на весь модуль), в результате скрипт не может получить очередное значение из таблицы и вываливает ошибку и валит заодно 1С. Говорю же что тут асинхронность сказывается, если только заводить по одному экземпляру "Системы" на каждую сериализацию, а потом удалять их по команде из скрипта.

P.S. Лучше JSON реализовать - посмотрел я, не так там всё и сложно, а возможности представления структур такие же как у XML, то есть можно хранить структуры любой сложности, а разворачивается структура из строки простым методом eval(str) в яваскрипте. Есть пример кодировки структур и объектов в JSON из 1С8, думаю можно и под 1С77 переписать: http://infostart.ru/public/59535/
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #7 - 20. Сентября 2011 :: 13:26
Печать  
+10
Пример из #2 заработал ( Win XP )
  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #8 - 20. Сентября 2011 :: 13:41
Печать  
maljaev писал(а) 20. Сентября 2011 :: 10:31:
3.2. Передача параметров в скрипт


Вот это не поможет?

http://www.1cpp.ru/forum/YaBB.pl?num=1312576677/15#24

Сделай пример, где ТЗ передается без сериализации. В скрипте работай с ТЗ, как с обычным объектом 1С, только методы и наименования колонок используй английские.
Пускай 1С ругается, я дальше гляну, может взлетит.


Пример взял из "Журнала".
Эх, жаль, что на javascript все написано. На vbs'е было бы проще.  Улыбка
« Последняя редакция: 20. Сентября 2011 :: 14:54 - chessman »  
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #9 - 20. Сентября 2011 :: 15:38
Печать  
Как и предполагал, взлетело.

Я конечно там код несколько коряво написал, но главное результат.
Времени нет допилить сегодня, пока только сделал передачу ТЗ в скрипт и вызов "ВыбратьСтроку".


ЗЫ: использовал DynamicWrapperX + исправления в Blang.dll (на лету) для передачи ТЗ. Пока незнаю, как избавиться от предупреждения IE об АктивИксе. Если это невозможно отключить, то упс.


ЗЫ2: параметры в функцию скрипта можно передавать так:

Код
Выбрать все
Браузер.Объект.document.parentWindow.put_array(pCBLContext); 



  

Clipboard02_012.jpg ( 93 KB | Загрузки )
Clipboard02_012.jpg
Наверх
 
IP записан
 
chessman
God Member
*****
Отсутствует



Сообщений: 1084
Зарегистрирован: 10. Августа 2007
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #10 - 20. Сентября 2011 :: 15:42
Печать  
Пример и класс DWX.Blang (просто создать 1 раз за сессию, он пропатчит Blang)
  

sample_001.zip ( 19 KB | Загрузки )
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #11 - 20. Сентября 2011 :: 16:44
Печать  
В принципе я уже придумал, как то же самое сделать с помощью штатного "Сериализовать" класса "Система". С ТЗ всё работает.

Вопрос в другом: можно в скрипт экземпляр своего класса передать? С помощью сериализации или еще как, не важно, ведь можно будет тогда перейти на совсем другой уровень обработки событий и обмена данными.

P.S. Опа, оказывается функцию в модуле скрипта можно прямо через точку вызывать... я не знал...  Улыбка
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #12 - 20. Сентября 2011 :: 17:24
Печать  
Ура, у меня получилась классная вещь! Оказывается можно сериализовать контекст формы!  Улыбка Вот что делаем:

Код
Выбрать все
Функция get_object(ИмяОбъекта)
	Возврат СоздатьОбъект(ИмяОбъекта);
КонецФункции

Процедура HTML_DocumentComplete()
	));
КонецПроцедуры
 



Код
Выбрать все
var object1C;

function initObject1C(obj) {

	object1C=GetObject(obj);

	var tz=object1C.get_object("ТаблицаЗначений");
	tz.ChooseLine(); // это работает !!!

	var myclass=object1C.get_object("МойКласс"); // это тоже работает !!!

}
 



И больше не нужно никаких обработчиков событий и т.д. - скрипт сам получает из 1С нужную информацию - заметьте любую, вплоть до пользовательских классов. Думаю что можно даже прямо к форме обратиться из скрипта, но не пробовал.

Единственная проблема - 1С вываливается тихо при закрытии обработки. Видимо надо какой-то деструктор для сериализованного контекста делать, chessman - может разберешься в чём дело?
  

___________________001.rar ( 8 KB | Загрузки )
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #13 - 20. Сентября 2011 :: 17:34
Печать  
Вылет 1С поборол:

Код
Выбрать все
Процедура ПриЗакрытии()
	Браузер.Объект.document.parentWindow.object1C="";
	Система="";
КонецПроцедуры
 



Вот и всех делов... Улыбка

P.S. chessman, так как всё что хотелось и даже более того - получается с помощью штатного "Система.Сериализовать", то я не понимаю в чём фишка использования DynamicWrapperX?  Озадачен
  

__________________.rar ( 8 KB | Загрузки )
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #14 - 20. Сентября 2011 :: 17:45
Печать  
по моему надо при закрытии
Код
Выбрать все
Процедура ПриЗакрытии()
	Браузер.Уничтожить();
КонецПроцедуры
 


проверить не могу потому что у меня еще раньше валиться твой
тестовый пример.

ps Только что увидел твой код
Все равно к #13 надо добавить #14
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #15 - 20. Сентября 2011 :: 21:11
Печать  
Вот пример как можно прямо из скрипта управлять формой 1С, создавать объекты, выполнять процедуры и функции. И это всё простой сериализацией контекста формы с передачей ее в скрипт. Также наконец-то удалось побороть долбаную систему безопасности IE, которая не давала создавать активное содержимое в скрипте страницы по "GetObject()" (то есть ошибка "Невозможно создание объекта сервером программирования объектов").

Код
Выбрать все
Процедура HTML_DocumentComplete()

	WSH=createObject("MSScriptControl.ScriptControl");
	WSH.language="javascript";
	Объект=WSH.Eval("GetObject("""+Система.Сериализовать(Контекст)+""")");

	Браузер.Объект.document.parentWindow.initObject1C(Объект);

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



Проверял на следующем, всё работает:

ОС: Windows 7 x32 IE9, Windows XP x32 IE8
1С: SQL 7.70.026
1C++: 3.2.3.16
FormEx: 2.0.5.93
« Последняя редакция: 20. Сентября 2011 :: 23:09 - maljaev »  

___________________002.rar ( 9 KB | Загрузки )
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #16 - 20. Сентября 2011 :: 21:14
Печать  
Вот скриншот к примеру из поста #15
Всё что вы видите, сделано прямо из скрипта.
Соответственно теперь всякие обработчики событий вроде "BeforeNavigate2" и "ОбработкаВнешнегоСобытия" в общем-то не нужны, раз можно прямо из скрипта рулить 1С (ну и наоборот конечно).  Улыбка
« Последняя редакция: 20. Сентября 2011 :: 23:09 - maljaev »  

___________005.png ( 27 KB | Загрузки )
___________005.png
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #17 - 21. Сентября 2011 :: 03:09
Печать  
Пытаюсь наваять универсальную функцию для создания нового элемента любого типа, но столкнулся с тем, что жабаскрипт не получает представления значений списка значений, т.е. в следующем
Код
Выбрать все
var name = '';
var value = paramlist.ПолучитьЗначение(i, name); 

name всегда содержит пустую строку, хотя в списке представление имеется, что видно при вызове ЗначениеВСтроку на стороне жабаскрипта.

Или надо искать другой способ передачи набора пар ключ-значение. Есть идеи?

Во вложении заготовка класса, целью которого является отказ от объекта Таблица.

Забыл про пример Улыбка запускается так
Код
Выбрать все
ПанельВеб = СоздатьОбъект("ПанельВеб"); ПанельВеб.Открыть(); 

« Последняя редакция: 21. Сентября 2011 :: 05:58 - Dmitry The Wing »  

__________001.rar ( 24 KB | Загрузки )
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #18 - 21. Сентября 2011 :: 06:27
Печать  
Dmitry The Wing писал(а) 21. Сентября 2011 :: 03:09:
Или надо искать другой способ передачи набора пар ключ-значение. Есть идеи?

Да легко. "Функция ПолучитьПредставление(СЗ,Номер) ...." - в 1С, или классом...
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #19 - 21. Сентября 2011 :: 06:59
Печать  
Обновил свой пример. Использовать также, как в прошлом посте.

Пример простейший, но показывает как можно из 1С полностью сформировать страницу без шаблона (точнее шаблон то есть, но пустой).

В большинстве реальных задач будет выгоднее использовать готовый шаблон, но я ставил целью отладить возможность добавления на лету любых объектов, поддерживаемых IE.
  

__________002.rar ( 15 KB | Загрузки )
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #20 - 29. Сентября 2011 :: 04:57
Печать  
Во изврат ... если создавать элементы таблицы - то их не видно, но если создать дивку и в иннерхтмл засунуть таблицу - то все в порядке ...  Озадачен
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #21 - 29. Сентября 2011 :: 05:54
Печать  
Это неправда, любые элементы нормально создаются в динамике. Вы просто не умеете их готовить Улыбка Не забывайте про THEAD и TBODY!
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #22 - 30. Января 2012 :: 02:42
Печать  
Очень интересно! Как раз то, что нужно в будущем проекте.
Правда, пока еще не копал код, но возник вопрос. Как я понимаю, используется один хтмл документ (шаблон) для формирования всей этой прелести? А как это все будет работать одновременно (ну или почти одновременно) под разными пользователями?
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #23 - 30. Января 2012 :: 07:35
Печать  
Html формируется в памяти, а не на диске, а у каждого пользователя память своя ... технология позволяет успешно реализовать аналог AJAX'а. И даже использовать готовые JS-классы, например jQuery и его потомки. Но по началу придется поиметь много секса, зато после осознания и овладевания все становится очень даже приятно и красиво.
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #24 - 30. Января 2012 :: 07:45
Печать  
Ну тогда вообще отлично!
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #25 - 30. Января 2012 :: 09:26
Печать  
Dmitry The Wing писал(а) 30. Января 2012 :: 07:35:
Html формируется в памяти, а не на диске, а у каждого пользователя память своя ... технология позволяет успешно реализовать аналог AJAX'а. И даже использовать готовые JS-классы, например jQuery и его потомки. Но по началу придется поиметь много секса, зато после осознания и овладевания все становится очень даже приятно и красиво.

ajax не так уж и сложен если использовать библиотеки.
Я вчера разбирался с движком, используемом на mista.ru
Там используется Subsys_JsHttpRequest от Котлерова.
Все достаточно просто.
  
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #26 - 31. Января 2012 :: 01:16
Печать  
trdm писал(а) 30. Января 2012 :: 09:26:
ajax не так уж и сложен если использовать библиотеки.
Я вчера разбирался с движком, используемом на mista.ru
Там используется Subsys_JsHttpRequest от Котлерова.
Все достаточно просто.
Ты не понял. C аяксом я дружу очень давно и плодотворно, но одно дело работать на стороне сервера и клиента, а совсем другое - только на стороне клиента, т.к. в обсуждаемом сдесь варианте вызовов сервера нет и не будет. Все производится через перехват обработчиков браузера, т.е. на сервер ничего не идет, а аякс именно в этом заключается - в асинхронной работе с сервером.
Потому и выходит не аякс, а только его аналог, хотя пользователь врядли заметит разницу ...
Для полноценного аякса надо биндить сокет(ы), запускать параллельные треды (иначе будет слишком часто белое окно 1С) и обрабатывать запросы клиента, но разве оно того стоит?
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #27 - 31. Января 2012 :: 23:55
Печать  
Все это прекрасно и отлично. Но движок IE все таки убог, если использовать CSS и JS.
Никто не юзал Mozilla ActiveX Control? Ибо под WebBrowser ActiveX много красивостей и вкусностей просто не работают. В лучшем случае работают на половину.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #28 - 01. Февраля 2012 :: 02:17
Печать  
ziflex писал(а) 31. Января 2012 :: 23:55:
Ибо под WebBrowser ActiveX много красивостей и вкусностей просто не работают. В лучшем случае работают на половину.
Все там работает, просто ты не умеешь его готовить ... исторически сложилось, что большинство нововведений идут как раз от IE, но мозилла делает это несколько провильнее. Я к тому, что если у тебя что-то не пашет в IE, то это объясняется или версией IE (кстати, версия активикса всегда ниже версии браузера) или тем, что ты просто не знаешь, как такое сделать именно в IE установленной версии...
Преимущество IE здесь только в том, что оно уже растет в системе, а все остальное необходимо устанавливать отдельно... активиксов существует немеряно, но этот предустановлен: не требует проверки и на всех компах работает.
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #29 - 20. Февраля 2012 :: 05:31
Печать  
Либо я что-то не так делаю, либо невозможно вызвать функцию из сериализованной формы элемента справочника... Печаль а с обработкой работает.
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #30 - 20. Февраля 2012 :: 06:45
Печать  
ziflex писал(а) 20. Февраля 2012 :: 05:31:
Либо я что-то не так делаю, либо невозможно вызвать функцию из сериализованной формы элемента справочника... Печаль а с обработкой работает.

сериализованной формы элемента справочника - что за зверь такой?
  
Наверх
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #31 - 20. Февраля 2012 :: 06:52
Печать  
Делаю как в обработке.
Из формы элемента справочника
Код
Выбрать все
Объект = WSH.Eval("GetObject("""+Система.Сериализовать(Контекст)+""")"); 



Тут все проходит.
Но как только js пытается выполнить это:
Код
Выбрать все
var list=object1C.get_object("СписокЗначений"); 



выдает ошибку. все тоже самое, но из внешней обработки - работает.
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #32 - 20. Марта 2012 :: 00:35
Печать  
Эх, хороший был бы инструмент, если бы 1Ска не падала после 15-20ой сериализации контекста Печаль
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #33 - 20. Марта 2012 :: 02:20
Печать  
Странно. У меня не падает...
  
Наверх
 
IP записан
 
ziflex
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 76
Местоположение: Владивосток
Зарегистрирован: 05. Мая 2011
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #34 - 20. Марта 2012 :: 12:50
Печать  
хм.. странно.
а можешь сделать эксперимент?
создай обработку - на кнопку повесь процедуру которая контекст будет сериализовывать? У меня так после раза 5ого уже падает.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #35 - 22. Мая 2012 :: 07:28
Печать  
никто не может помочь скриптик привентить к 1с? есть хтмл-ка там вызывается скрипт и картинки на форме перетаскиванием сортируются, показывать это через 1с проблем нет активиском експлорера, а вот как отловить смещение, тоесть какая картинка теперь и где, чтобы сортировку в базу записать?
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #36 - 23. Мая 2012 :: 04:33
Печать  
Как я понял из (0) надо вешать кнопку/ссылку для перехода на другую страницу. Этот переход ловится в событии "BeforeNavigate2". Эта ссылка должна формироваться динамически, исходя из твоей структуры данных.
Например, ссылка будет вида ":item=100&position=5:item=102&position=7" и т.д. Ловишь этот переход, распарсиваешь его в 1С и записываешь в базу данных, сам переход подменяешь на новый URL в котором будет страничка с большими буквами: "Сохранение данных успешно завершено".
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #37 - 23. Мая 2012 :: 07:36
Печать  
если ты мне, то у меня скрипты которые реализуют механизм таскания, красивый и оно не ловится этим событием Печаль а как с генерировать событие из скрипта при перемещении тоже вопрос
приложу наглядный пример того, что уже есть, может еще и кому пригодиться Подмигивание
но вот как ловить события пока вопрос.
  

dragNdrop.rar ( 1614 KB | Загрузки )

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #38 - 23. Мая 2012 :: 09:42
Печать  
Попробуй так.
З.Ы. На диск сохраняет значение "Ссылка" в файл c:\out.ref, чтобы видно было - что парсить.
З.З.Ы. Лучше бы более короткие и удобные значения сохранять
  

drag2.rar ( 1624 KB | Загрузки )
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #39 - 23. Мая 2012 :: 10:15
Печать  
да и по сути нужно отловить именно те картинки, которые местами поменяли Печаль
мне же потом нужно в тз их местами поменять, потому я должен знать что и куда переместили.
А отдельная кнопка записать как бы ничего мне не дает Печаль
Или если понял, предлагаешь просто потом снова спарсить запись и отсортировать все что получил в тз по новым правилам? ну как то не комильфо Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #40 - 23. Мая 2012 :: 10:47
Печать  
pavlo писал(а) 23. Мая 2012 :: 10:15:
да и по сути нужно отловить именно те картинки, которые местами поменяли Печаль
мне же потом нужно в тз их местами поменять, потому я должен знать что и куда переместили.
А отдельная кнопка записать как бы ничего мне не дает Печаль
Или если понял, предлагаешь просто потом снова спарсить запись и отсортировать все что получил в тз по новым правилам? ну как то не комильфо Подмигивание

Ничего не понял, но попробую протелепатить.
Возможно реализовать два типовых сценария работы:
1. В ХТМЛ двигаем как нам надо картинки, потом нажимаем записать, информация о новом состоянии уходит в "BeforeNavigate2", там ее разбираем и записываем в БД.
2. В ХТМЛ двигаем картинку, при этом формируется запрос на переход на новую страницу, в котором прописывается, каким-либо образом, откуда и куда мы что двинули. Этот запрос ловится в "BeforeNavigate2", парится и записывается тут же в БД.
Каким образом конкретно реализовать - решать тебе.
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #41 - 23. Мая 2012 :: 10:57
Печать  
про 1 я так и понял
а второй можешь по подробнее? как сгенерировать переход? а то я понял что переход на другую страницу убьет отображение текущей или я что то не понял? Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #42 - 23. Мая 2012 :: 11:16
Печать  
В страничке ХТМЛ-я, в конце меняешь скрипт
Код
Выбрать все
	<script type="text/javascript">
		$("#list1, #list2").dragsort({ dragSelector: "div", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "<li class='placeHolder'><div></div></li>" });
		function saveOrder() {
			var data = $("#list1 li").map(function() { return $(this).children().text(); }).get();
      location.href = "#"+data.join("|");
		};
	</script> 


И в обработке уже можно:
Код
Выбрать все
Процедура HTML_BeforeNavigate2(Контейнер,Ссылка,Флаги,Фрэйм,Пост,Заголовки,Отмена)
	ПозицияРазделителя=Найти(Ссылка,"#");
	Сообщить(Ссылка);
	Если ПозицияРазделителя>0 Тогда

		Отмена=1;
		Действие=СокрЛП(СтрЗаменить(Сред(Ссылка,ПозицияРазделителя+1),"%20"," "));
		Сервис.ВнешнееСобытие("HTML",,Действие);

	КонецЕсли;

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

  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #43 - 24. Мая 2012 :: 02:35
Печать  
с таким скриптом возвращается только полный путь и название файла этой html, если же не text(), а все же html() то возвращает все что есть, а не то, что передвинули и куда Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #44 - 24. Мая 2012 :: 05:07
Печать  
pavlo писал(а) 24. Мая 2012 :: 02:35:
с таким скриптом возвращается только полный путь и название файла этой html, если же не text(), а все же html() то возвращает все что есть, а не то, что передвинули и куда Улыбка

1. Полный путь возвращается только в первый раз, т.к. ты сам в обработке вызываешь OnNavigate (и ничего другого в данный момент в Ссылка нет)
2. Если попробуешь передвинуть что-нибудь - отработает скрипт из HTML-страницы и выдаст другую ссылку (у меня, например, выдало так: -946%20|Ю3-920%20|П3-937%20|П1-763%20|Ю5-951%20|М3-773%20|П3-938)
3. Способ получения/хранения информации - выбирал ты, я лишь вывел ее тебе на экран. Я бы сделал через хранение уникальных кодов, которые потом было бы легко парсить.
4. Да и не подписывался я делать тебе готовое решение, просто из любопытства открыл твой пример. Так что все изложеннное "Just for fun" Подмигивание
5. В принципе сделать не сложно, выбрать только - где смотреть изменение порядка - в HTML-е в скрипте или в 1С-ке, получив полный путь.
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #45 - 24. Мая 2012 :: 06:05
Печать  
3. то что выдает и есть вроде уникальные коды или в хтмл как то указать можно отдельно id еще?

p.s. спасибо огромное, получается и так не плохо!
« Последняя редакция: 24. Мая 2012 :: 07:24 - pavlo »  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #46 - 24. Мая 2012 :: 10:13
Печать  
Не за что.
Удачи!
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #47 - 25. Мая 2012 :: 17:28
Печать  
ща ломаю голову как передать ей не сохраняя на диске хтмл, через обхект текст не канает и кодировка кривая и вообще не хочет, видать через что то другое придумтаь нужно. А то собирать промежуточные файлы не хочется Подмигивание А так прикольно должно получиться.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #48 - 26. Мая 2012 :: 06:35
Печать  
pavlo писал(а) 25. Мая 2012 :: 17:28:
ща ломаю голову как передать ей не сохраняя на диске хтмл, через обхект текст не канает и кодировка кривая и вообще не хочет, видать через что то другое придумтаь нужно. А то собирать промежуточные файлы не хочется Подмигивание А так прикольно должно получиться.

1. У меня в демке вроде ничего не сохранялось
2. По поводу кодировки - именно это я и имел в виду, когда писал про уникальные идентификаторы, т.е. какой-то числовой код, присвоенный картинке
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #49 - 26. Мая 2012 :: 12:20
Печать  
у тебя ничего не сохранялось но она ХТМЛ открывает изначально же, вот от него хотел избавиться Подмигивание
на счет ИД не пойдет, менеджер по ним и ориентируется, это артикулы по сути и там есть к сожалению русские буквы Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #50 - 26. Мая 2012 :: 12:31
Печать  
pavlo писал(а) 26. Мая 2012 :: 12:20:
у тебя ничего не сохранялось но она ХТМЛ открывает изначально же, вот от него хотел избавиться Подмигивание
на счет ИД не пойдет, менеджер по ним и ориентируется, это артикулы по сути и там есть к сожалению русские буквы Подмигивание

на счет ИД, просто я не силен в JavaSript&jQuery (вообще, по сути, в первый раз в это влез), поэтому и выбрал поле children().text(), но, вполне возможно, у JavaScript есть возможность выдернуть и какой-либо произвольный аттрибут. И, если так, то можно записать в этот атрибут Id картинки, и потом его отправлять в 1С. (на тестовой пробовал поиграться с children().attr() - но у меня быстро разобраться не получилось, поэтому забил)
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #51 - 26. Мая 2012 :: 13:06
Печать  
c attr() я тоже пытался, не хочет пахать в итоге осталось html() и text() в этих скриптах я тоже не силен, человек прислал, как раз то что хотелось, но привинтить оказалось не так быстро, ты помог и я привинтил, конечно еще бы вообще эту хтмл не держать на диске, а сразу создал и передал, но пока так не хочет почему то разбираюсь Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #52 - 30. Мая 2012 :: 10:10
Печать  
попытался перенести код формирования HTML в 1с и все сломалось Улыбка
теперь в момент события в HTML alert() говорит что все там есть, тут же в location.href передаешь, срабатывает событие и там только ссылка на этот файл HTML Печаль барабашки какие-то Печаль

Код
Выбрать все
	<script type="text/javascript">
		$("#list1, #list2").dragsort({ dragSelector: "div", dragBetween: true, dragEnd: saveOrder, placeHolderTemplate: "<li class='placeHolder'><div></div></li>" });
	function saveOrder() {
		var data = $("#list1 li").map(function() { return $(this).children().text(); }).get();
	alert("#"+data.join("|"));
		window.location.href = "#"+data.join("|");
	};

 



p.s. победить так, чтобы передавать в Navigate() готовый текст я так и не смог пока, приходится сохранять на диск файл.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #53 - 31. Мая 2012 :: 01:05
Печать  
pavlo писал(а) 30. Мая 2012 :: 10:10:
p.s. победить так, чтобы передавать в Navigate() готовый текст я так и не смог пока, приходится сохранять на диск файл.
Ты не с той стороны пытаешься побеждать:
  • Первоначальную инициализацию без файла можно реализовать через стримадаптер, но это непросто. Потому выгоднее использовать именно файл, пусть даже пустой.
  • Дальнейшую работу можно полностью реализовать через DOM-модель и JavaScript. Т.е. файл нужен только в начале!
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #54 - 31. Мая 2012 :: 02:08
Печать  
если файл не обойти, то можно и туда писать, другое дело почему то он потом там не пашет Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #55 - 31. Мая 2012 :: 09:55
Печать  
pavlo писал(а) 31. Мая 2012 :: 02:08:
если файл не обойти, то можно и туда писать,
Зачем писать в файл? Это же долго и требует наличия прав, чего в реальных условиях бывает трудно добиться.

pavlo писал(а) 31. Мая 2012 :: 02:08:
другое дело почему то он потом там не пашет Улыбка
А вот это возможно только по одной причине: синтаксическая ошибка.
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #56 - 31. Мая 2012 :: 10:44
Печать  
Dmitry The Wing писал(а) 31. Мая 2012 :: 09:55:
pavlo писал(а) 31. Мая 2012 :: 02:08:
если файл не обойти, то можно и туда писать,
Зачем писать в файл? Это же долго и требует наличия прав, чего в реальных условиях бывает трудно добиться.

pavlo писал(а) 31. Мая 2012 :: 02:08:
другое дело почему то он потом там не пашет Улыбка
А вот это возможно только по одной причине: синтаксическая ошибка.


1. ну потому что сам пишешь гемор стрим реализовывать, через Adodb пробовал не проканало.
2. ну какая синтаксическая ошибка?
передаю в window.location.href срабатывает событие BeforNavigate2() но там пусто, тут же по выходу его в скрипте делаю alert(window.location.href) и там все есть Улыбка как то сложно считать что это синтаксис Улыбка
делал перед отсылкой alert() все есть, тут же пихаю в window.location.href и по событию пусто Улыбка
Тоже считаю что ошибка должна быть, но тут просто уже некуда вроде  Круглые глаза
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #57 - 01. Июня 2012 :: 01:19
Печать  
Меня сильно смущают баксы в твоем примере. Ты уверен, что прототипы описаны там, где ты их пытаешься пользовать?
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #58 - 01. Июня 2012 :: 04:04
Печать  
Dmitry The Wing писал(а) 01. Июня 2012 :: 01:19:
Меня сильно смущают баксы в твоем примере. Ты уверен, что прототипы описаны там, где ты их пытаешься пользовать?

Баксы это от jQuery
Цитата:
$(…) Функция jQuery:
Имя      Тип
jQuery( выражение, контекст )      Возвращает: jQuery

Эта функция принимает строку, содержащую CSS селектор, которая затем используется для поиска соответствующих элементов.
jQuery( html, ownerDocument )      Возвращает: jQuery

На лету создает элементы DOM из предоставленной строки чистого HTML.
jQuery( элементы )      Возвращает: jQuery
Использование функциональности jQuery для одного или нескольких элемента(ов) DOM
jQuery( вызов )      Возвращает: jQuery
Сокращение для $(document).ready().
Примеры

   Код

Изменяет цвет фона страницы на черный.

$(document.body).css( "background", "black" );

   Код

Скрывает все элементы ввода в пределах формы.

$(myForm.elements).hide()

  
Наверх
ICQ  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #59 - 01. Июня 2012 :: 05:20
Печать  
pavlo писал(а) 30. Мая 2012 :: 10:10:
попытался перенести код формирования HTML в 1с и все сломалось Улыбка
...
p.s. победить так, чтобы передавать в Navigate() готовый текст я так и не смог пока, приходится сохранять на диск файл.

Еще одно направление для поисков:
Код
Выбрать все
Процедура ПослеОткрытия()

	Браузер=СоздатьОбъект("АктивИкс");
	Браузер.УстановитьАтрибут(Форма,"HTML");
	Браузер.СоздатьЭУ("Shell.Explorer.2");
	Браузер.ОбработкаСобытий = 1;

	ВыровнятьРеквизиты();
	Браузер.Объект.Navigate("about:blank");
	флЗакрыть=0;
	Форма.Закрыть();
КонецПроцедуры

//======================================================================
Процедура ПриЗакрытии()
	Если флЗакрыть=0 Тогда
		флЗакрыть=1;
		//Попробуем заполнить содержимое самостоятельно
		ДокХТМЛ=Браузер.Объект.Document;
		ДокХТМЛ.write("HELLO WORLD");
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;
КонецПроцедуры // ПриЗакрытии 

  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #60 - 01. Июня 2012 :: 06:47
Печать  
не понял смысла этого, ведь хтмл созданный работает и даже событие срабатывает в 1с, только в зтмл переданный параметр содержит данные, а в событие уже в коде 1с там пусто ну кроме ссылки на документ сам.
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #61 - 01. Июня 2012 :: 07:13
Печать  
pavlo писал(а) 01. Июня 2012 :: 06:47:
не понял смысла этого, ведь хтмл созданный работает и даже событие срабатывает в 1с, только в зтмл переданный параметр содержит данные, а в событие уже в коде 1с там пусто ну кроме ссылки на документ сам.

Ничего не понял из твоего поста, расшифруй, плиз, а то телепатство мое закончилось.
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #62 - 01. Июня 2012 :: 07:36
Печать  
а в чем тут телепатство?
я не понял для чего твой код, если выше описывал что внутри html делаю так

Код
Выбрать все
alert("#"+data.join("|"););
window.location.href = "#"+data.join("|");
alert(window.location.href);
 


и везде показывает нужные данные, то есть в data все есть, после того как поместил в window.location.href, сработало событие уже в 1с коде befornavigate2(Контейнер,Ссылка,Флаги,Фрэйм,Пост,Заголовки,Отмена) и в переменной Ссылка только путь до хтмл, а переданных данных нет Печаль
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #63 - 04. Июня 2012 :: 01:29
Печать  
pavlo писал(а) 01. Июня 2012 :: 07:36:
и везде показывает нужные данные, то есть в data все есть, после того как поместил в window.location.href, сработало событие уже в 1с коде befornavigate2(Контейнер,Ссылка,Флаги,Фрэйм,Пост,Заголовки,Отмена) и в переменной Ссылка только путь до хтмл, а переданных данных нет Печаль
Сложно догадаться, что именно ты делаешь не так, но ... зачем тебе столько посредников? Кто запрещает напрямую вызывать методы из 1С?
  
Наверх
 
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #64 - 04. Июня 2012 :: 03:54
Печать  
Dmitry The Wing писал(а) 04. Июня 2012 :: 01:29:
pavlo писал(а) 01. Июня 2012 :: 07:36:
и везде показывает нужные данные, то есть в data все есть, после того как поместил в window.location.href, сработало событие уже в 1с коде befornavigate2(Контейнер,Ссылка,Флаги,Фрэйм,Пост,Заголовки,Отмена) и в переменной Ссылка только путь до хтмл, а переданных данных нет Печаль
Сложно догадаться, что именно ты делаешь не так, но ... зачем тебе столько посредников? Кто запрещает напрямую вызывать методы из 1С?


ну а как 1с узнает о том, что произошло событие?  только через befornavigate2() а потом то можно вызвать событие 1с, но проблема в том, что на входе события этого активикса считай данных нет Печаль
Засек момент, если в HTML в таблице list1 больше 295 элементов то перестает передавать Печаль если меньше отлично передает Печаль кто нибудь в курсе про ограничения? подозреваю это какое то ограничение href ссылки и как с этим бороться не резав интересно Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #65 - 04. Июня 2012 :: 04:54
Печать  
Попробовал формировать HTML "на лету", но оказалось неудобно подключать скрипты, так, не сработало:
Код
Выбрать все
	КатФ = "file:\\"+СтрЗаменить(КаталогФормы,"/","\");
ТекстХТМЛ="...
	|<body>
	|	<script type=""text/javascript"" src="""+КатФ+"jquery.min.js""></script>
	|	<script type=""text/javascript"" src="""+КатФ+"jquery.dragsort-0.5.1.min.js""></script>" 


Сейчас еще попробую "сериализацию" подкрутить
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #66 - 04. Июня 2012 :: 04:57
Печать  
Salimbek писал(а) 04. Июня 2012 :: 04:54:
Попробовал формировать HTML "на лету", но оказалось неудобно подключать скрипты, так:
Код
Выбрать все
	КатФ = "file:\\"+СтрЗаменить(КаталогФормы,"/","\");
ТекстХТМЛ="...
	|<body>
	|	<script type=""text/javascript"" src="""+КатФ+"jquery.min.js""></script>
	|	<script type=""text/javascript"" src="""+КатФ+"jquery.dragsort-0.5.1.min.js""></script>" 


Сейчас еще попробую "сериализацию" подкрутить

ну я на лету и делаю, скрипты подключаю также, а вот не сохраняя в файл этот хтмл подсунуть объект в виде stream не получается.
Скрипты пробовал впихнуть тоже на лету, но это капец, реально с форматированием офигеть, плюнул на это.
Да и еще проблема с location.href на рисовалась, есть ограничения похоже по размеру этой строки Печаль
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #67 - 04. Июня 2012 :: 06:52
Печать  
Посмотри такой вариант:
1. Динамически формируем список
2. Получаем выходные данные сразу в ТЗ
  

drag3.zip ( 10 KB | Загрузки )
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #68 - 04. Июня 2012 :: 08:50
Печать  
Salimbek писал(а) 04. Июня 2012 :: 06:52:
Посмотри такой вариант:
1. Динамически формируем список
2. Получаем выходные данные сразу в ТЗ


в принципе вариант, только тз не сортируется, тоесть первый раз только один элемент двигается и все, а там могут толпу туда сюда двигать.
а еще при закрытии обработки, 1с решает что ей нужно зарыться тоже Улыбка)
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #69 - 04. Июня 2012 :: 09:23
Печать  
pavlo писал(а) 04. Июня 2012 :: 08:50:
Salimbek писал(а) 04. Июня 2012 :: 06:52:
Посмотри такой вариант:
1. Динамически формируем список
2. Получаем выходные данные сразу в ТЗ


в принципе вариант, только тз не сортируется, тоесть первый раз только один элемент двигается и все, а там могут толпу туда сюда двигать.
а еще при закрытии обработки, 1с решает что ей нужно зарыться тоже Улыбка)

1. в ТЗ просто строки добавляются, см., например:
Код
Выбрать все
Процедура HTML_BeforeNavigate2(Контейнер,Ссылка,Флаги,Фрэйм,Пост,Заголовки,Отмена)
	ПозицияРазделителя=Найти(Ссылка,"#");
	Если ПозицияРазделителя>0 Тогда

		//Сообщить(Ссылка);
		Отмена=1;
		tz_html.ВыбратьСтроку();
		tz_html.УдалитьСтроки();
		//Действие=СокрЛП(СтрЗаменить(Сред(Ссылка,ПозицияРазделителя+1),"%20"," "));
		//Сервис.ВнешнееСобытие("HTML",,Действие);
	Иначе
		флЗакрыть=0;
		Форма.Закрыть();
	КонецЕсли;

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


2. Угу, в демке посмотрел - в ПриЗакрытии надо добавить:
Код
Выбрать все
Процедура ПриЗакрытии()
	Если флЗакрыть=0 Тогда
		флЗакрыть=1;
		//Попробуем заполнить содержимое самостоятельно
		ДокХТМЛ=Браузер.Объект.Document;
		Элем=ДокХТМЛ.getElementById("list1");
		Элем.innerHTML=ТекстХТМЛ();
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;

	Браузер.Объект.document.parentWindow.object1C="";
	Система="";
	Браузер.Уничтожить();
КонецПроцедуры // ПриЗакрытии 

  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #70 - 04. Июня 2012 :: 10:30
Печать  
на счет закрытия 1с извини не досмотрел, в этой теме это обсуждалось уже.
да работает, огромный сенкс Подмигивание
осталось для красоты отказаться от записи на диск html и вообще красота была бы Улыбка но и так не плохо Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #71 - 04. Июня 2012 :: 10:43
Печать  
не пиши на диск html, в моем примере - там же блок с картинками формируется из 1С-ного кода (ТекстХТМЛ() в ПриЗакрытии), а сам HTML-файл остается неизменным
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #72 - 04. Июня 2012 :: 13:15
Печать  
Salimbek писал(а) 04. Июня 2012 :: 10:43:
не пиши на диск html, в моем примере - там же блок с картинками формируется из 1С-ного кода (ТекстХТМЛ() в ПриЗакрытии), а сам HTML-файл остается неизменным

суть не иметь его вовсе Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #73 - 05. Июня 2012 :: 09:57
Печать  
pavlo писал(а) 04. Июня 2012 :: 13:15:
Salimbek писал(а) 04. Июня 2012 :: 10:43:
не пиши на диск html, в моем примере - там же блок с картинками формируется из 1С-ного кода (ТекстХТМЛ() в ПриЗакрытии), а сам HTML-файл остается неизменным

суть не иметь его вовсе Улыбка

Пробовал - очень сложно скрипты подключать (я разобраться не смог).
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #74 - 06. Июня 2012 :: 04:38
Печать  
Salimbek писал(а) 05. Июня 2012 :: 09:57:
pavlo писал(а) 04. Июня 2012 :: 13:15:
Salimbek писал(а) 04. Июня 2012 :: 10:43:
не пиши на диск html, в моем примере - там же блок с картинками формируется из 1С-ного кода (ТекстХТМЛ() в ПриЗакрытии), а сам HTML-файл остается неизменным

суть не иметь его вовсе Улыбка

Пробовал - очень сложно скрипты подключать (я разобраться не смог).


не, ну пусть скрипты лежат на диске, главное остальное тело не создавать на диске Подмигивание
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #75 - 06. Июня 2012 :: 06:45
Печать  
В моем варианте - на диске лежат:
  • 1 файл с HTML (не редактируется);
  • 2 файла со скриптами (не редактируются);
  • каталог с фотками (не редактируются).

Реализация при этом - почти без проблем
-------------------------------
Ты же хочешь:
  • 1 файл с HTML (не редактируется);
  • 2 файла со скриптами (не редактируются);
  • каталог с фотками (не редактируются).

но с проблемами?
  
Наверх
ICQ  
IP записан
 
pavlo
1c++ donor
1c++ power user
Отсутствует



Сообщений: 712
Местоположение: г. Новосибирск
Зарегистрирован: 10. Ноября 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #76 - 06. Июня 2012 :: 14:00
Печать  
в том и дело что без проблем хочется, суть в том что и так пойдет, просто как идея интересна Улыбка а скрипты потом попробовал прикрутить бы и в итоге одни картинки бы остались Улыбка
  

1с++     3.2.4.1
Formex  2.0.5.99b
Наверх
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #77 - 22. Ноября 2012 :: 03:03
Печать  
Ещё один примитивный пример: слегка интерактивная карта ДубльГИС
  

_________001.zip ( 24 KB | Загрузки )
Наверх
 
IP записан
 
selesta
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 11
Зарегистрирован: 26. Июня 2012
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #78 - 24. Марта 2014 :: 14:39
Печать  
Сделал тоже карту на базе API 2.0 Яндекса с возвратом значений в 1с
http://infostart.ru/public/265779/
  
Наверх
 
IP записан
 
Logan
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 9
Зарегистрирован: 21. Апреля 2018
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #79 - 02. Февраля 2019 :: 13:01
Печать  
Возможно не совсем по теме, но используя ActiveX IE+tinyMCE заметил очень не хороший нюанс. Память растет, после открытия и закрытия формы с браузером на 2 мб. Меня интересуют html редакторы или браузеры которые не жрали бы так память, поскольку надо открывать много раз редкатор. Есть альтернативы ie? Или же хитроумный алгоритм уничтожения объекта?
  
Наверх
 
IP записан
 
zelenprog
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 42
Зарегистрирован: 03. Июня 2022
Пол: Мужской
Re: Примеры и наработки по использованию WebBrowser ActiveX
Ответ #80 - 03. Июня 2022 :: 16:49
Печать  
Подскажите, можно ли с помощью этого компонента сделать обычную форму 1С 7.7 не-максимизируемой (даже если другие окна максимизированы) и отображаемой поверх других форм?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать