Имя: Пароль:
1C
 
v8: Как выполнить функцию JavaScript в ПолеHTMLДокумента и получить ее результат
0 itPiligrim
 
07.08.06
16:23
Есть: ПолеHTMLДокумента в которое загружается HTML страница с некоторой JavaScript функцией.

Задача: после загрузки страницы выполнить эту функцию. При загрузке HTML страницы эта функция не выполняется, требуется в произвольный момент вызывать ее и получить ее результат.

Вроде все просто, но как сделать?

Я пока копаю в таком направлении:

По событию ДокументСформирован:

Скрипт = new COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "JavaScript";
Скрипт.AddObject("test", ПолеHTML.Документ.scripts.item("test"));

(тег <script> на странице имеет id=test и я пытаюсь его запихнуть в ScriptControl и выполнить функцию какую-нибудь, но ничего не получается.)

Попытка использовать eval или ExecuteStatement ни к чему приводит, пишет, что не поддерживается такой метод или св-во.

Можно ли вообще это сделать?
1 vde69
 
07.08.06
16:28
можно на web форме сделать кнопку,
2 itPiligrim
 
07.08.06
17:00
(1)

Кнопку то можно сделать, можно даже повесить на нее событие скажем onClick="test()" но как сделать так, чтобы результат выполнения функции test() попал в 8-ку.

Вариант с передачей через строку поиска типа http://index.html?param=123
не предлагать, результаты функции могут быть довольно большими.
3 vde69
 
07.08.06
17:05
может это поможет:


<%@ Language=javascript %>

<%

// соединение с базой (обьекты храняться в переменных сесии)
   a = 1;
   try
   {
       if (Session("entConn") == null)
       {
           Session("entConn") = new ActiveXObject("v8.comconnector");
           }
       entConn = Session("entConn");
   
       if (Session("conn") == null)
       {
           Session("conn") = entConn.connect("file=d:/1c_80/HelpDesk;usr=com;pwd=123");
           Session("conn").ПроверитьIP(" " + Request.ServerVariables("REMOTE_ADDR"));
       }
       conn = Session("conn");
   }        
   catch (exc)
   {
       a=0;
       Session("entConn") = null;
       Session("Conn") = null;
       entConn = null;
       conn = null;
         Response.Write("<p align=\"center\"><font size=\"4\">Ошибка сервера при подключении к 1с</font></p>");
   }

   if (a == 1)
   {
       try
       {

// обработка выбора задачи, процесса, статьи, вопроса к БЗ

           recTxt = Request.QueryString("idb");
           if (recTxt.Count != 0)
               conn.УстановитьТекущуюСтатью(recTxt(1));

           recTxt = Request.QueryString("idp");
           if (recTxt.Count != 0)
               conn.УстановитьТекущийПроцесс(recTxt(1));
   
           recTxt = Request.QueryString("idz");
           if (recTxt.Count != 0)
               conn.УстановитьТекущуюЗадачу(recTxt(1));

           recTxt = Request.QueryString("q");
           if (recTxt.Count != 0)
               conn.УстановитьТекущийВопрос(recTxt(1));

// обработка формы новой заявки, и новых действий для задачи

           num=0;
           recTxt = Request.Form("kol");
           if (recTxt.Count != 0)
               num=recTxt(1);
           if (num > 0)
           {

               fl="";
               recTxt = Request.Form("nt");
               if (recTxt.Count != 0)
                   fl=recTxt(1);

               if (fl=="proc")
               {
                   tc=conn.БизнесПроцессы.ВедениеЗаявки.СоздатьБизнесПроцесс();
                   t="Без темы";
                   recTxt = Request.Form("temа");
                   if (recTxt.Count != 0)
                       t=recTxt(1);
                   tc.Тема=t;
               }

               if (fl=="zad")
               {
                   tc=conn.ПараметрыСеанса.ТекущаяЗадача.ПолучитьОбъект();
                   t=-1;
                   recTxt = Request.Form("tolls");
                   if (recTxt.Count != 0)
                       t=recTxt(1);
                   tc.БудущиеДействия.Очистить();                    
               }


               for (i = 1; i < num; i++)
               {
                   n=-1;
                   recTxt = Request.Form("v1_" + i);
                   if (recTxt.Count != 0)
                       n=recTxt(1);
                   k='';
                   recTxt = Request.Form("v2_" + i);
                   if (recTxt.Count != 0)
                       k=recTxt(1);

                   if (fl=="proc")
                       conn.ДобавитьСтрокуБП(tc, n, k);

                   if (fl=="zad")
                       conn.ДобавитьСтрокуЗадачи(tc, n, k);
               }
               if (fl=="proc")
                   conn.ЗаписатьБП(tc);


               if (fl=="zad")
                   conn.ЗаписатьЗадачу(tc,t);
           }
           

   
// обработка формы авторизации

           login=-1;
           recTxt = Request.Form("login");
           if (recTxt.Count != 0)
               login=recTxt(1);

           pass="";
           recTxt = Request.Form("pass");
           if (recTxt.Count != 0)
               pass=recTxt(1);
   
           if (login != -1)
               if (login != "")
               {
                   if (pass != "")
                       conn.Авторизация(login, pass);
               }
               else
                   conn.РазАвторизация();



// обработка выбора страницы

           recTxt = Request.QueryString("p");
           if (recTxt.Count == 0)
               page = "default";
           else
               page = recTxt(1);

           Response.Write(conn.СобратьСтраницу(page));
       }        
       catch (exc)
       {
           Session("entConn") = null;
           Session("entConn") = null;
           entConn = null;
           conn = null;
             Response.Write("<p align=\"center\"><font size=\"4\">Ошибка сервера при выполнении процедур 1с</font></p>");
       }
   }
%>
4 Билли Г
 
07.08.06
17:07
Сообщить(ЭлементыФормы.ПолеHTMLДокумента.Документ.parentWindow.eval("someJSfunction()"));
5 itPiligrim
 
07.08.06
17:09
(4)

 Билли Г - супер! Спасибо, это то, что нужно!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.