Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Компонент TScriptControl. как его готовить?


Страницы:   1 2

Pcrepair ©   (2012-01-10 13:51:00) 

Добрый день
есть код

uses
 MSScriptControl_TLB; //и все остальные модули
///////////////////////
procedure TForm1.Button1Click(Sender: TObject);
begin
 try
   ScriptControl1.Language := 'JavaScript'; //интерпретатор JAVA скриптов?
   Memo2.Text := (IntToStr(ScriptControl1.Eval(Memo1.Text))); //выводим в МЕМО2 результат выполнения скрипта из МЕМО1
 finally

 end;
end;

Результаты:
1. компиляция без ошибок (РАД2010)
2. если вставить в МЕМО1 1+5, в МЕМО2 выводит 6, так, к примеру, типа арифметика работает
3. если взять с закачаной страницы какой нибуть жаба-скрипт между тегов (<script language="Javascript">f_bottom('<br>', '', '')</script>) и вставить его в МЕМО1 то выскакивает сообщение: "Предполагается наличие объекта" или "Предполагается ...что то еще" и другие сообщения об ошибке

Вопрос для знатоков:
1. вообще TScriptControl + idHTTP можно как то приспособить для обработки скриптов в закачаной странице, типа как это делает браузер, или оно для чего то иного предназначено?
2. кто нибуть знает как в браузерах типа Гекко или Хромиум, или в других компонентах (Твеббраузер, Embedded Web Browser, THtmlViewer, WebKit) происходит обработка скриптов, в том смысле - нельзя ли их как то приспособить (использовать часть их кода) для обработки скриптов, без отображения результатов обработки в визуальном компоненте.
В общем нужно следующее
- idHTTP закачал страницу
- интерпретатор JAVA обработал скрипты в коде страницы и вставил на их место результат работы
Всем ответившим - СПАСИБО


Pcrepair   (2012-01-11 18:49:00) [21]

а как еще? нашел только это

WebBrowser1.Navigate(URL, Flags, TargetFrameName, PostData, Headers);
repeat
   Application.ProcessMessages;
 until WebBrowser1.ReadyState >= READYSTATE_COMPLETE;
 if WebBrowser1.Document <> nil then
 (Webbrowser1.Document as IHTMLDocument2).ParentWindow.Focus;
 WebBrowser1.ExecWB(OLECMDID_SELECTALL,OLECMDEXECOPT_DONTPROMPTUSER);
 Application.ProcessMessages;
 if (Webbrowser1.Document as IHTMLDocument2).queryCommandEnabled('Copy') then
 Application.ProcessMessages;
 WebBrowser1.ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DONTPROMPTUSER);


Dimka Maslov   (2012-01-11 18:45:00) [22]


> можно вывести только через клипборд


Вы перестаньте мне сказать, как говорят в Одессе.


Pcrepair   (2012-01-11 18:36:00) [23]

вот если бы использовать компонент TWebBrowse как то в темную, только для выполнения скриптов. такое возможно?


Pcrepair   (2012-01-11 18:19:00) [24]

некошерно!!!
потомучто результат работы твеббраузера, особенно обработка жаба-скриптов, можно вывести только через клипборд (сделать КОНТРОЛ + А (+ С)). а чтоб вывести через клипборд, приложение должно быть активно (иначе не получит клипборд)) а чтоб приложение всегда было актвино, нужно или ставить виртМашину или вообще выделять отдельный кампутер для приложения - очень некошерно

к тому же твеббраузер дает очень загаженый хтмл-код, полные ссылки не восстанавливает, вообще вирусы его грызут и еще много косячком помельче
Хроимиум гораздо лучше, но принципиальные недостатки те же


Сергей М.   (2012-01-11 16:17:00) [25]


> - idHTTP закачал страницу


Это блажь такая - закачать именно средствами idHTTP ?
WebBrowser'om (который потом и скрипты без вопросов исполнит) некошерно ?


Pcrepair   (2012-01-11 15:57:00) [26]


> вообще в чем цель?

В общем нужно следующее
- idHTTP закачал страницу
- интерпретатор JAVA (или как то еще) обработал скрипты в коде страницы и вставил на их место результат работы


sniknik   (2012-01-11 12:54:00) [27]

> получается что браузеры что то свое
надо же, "открыл америку"... да они на весь инет уже заколебали "мерятся", у кого пинг короче, да яваскрипт быстрее... было бы прикольно после этих "меряний" если бы они все использовали один, тем более мелкосовтский объект (особенно мульти-платформенные...).

> И будут они недоступны
зато их можно сделать самому "унутре", и будет это первый шаг на пути к созданию "своего", кривого, браузера. :)

вообще в чем цель? если нужен скриптовый язык то их много, а прямо тут, в этом "компоненте"/обьекте, можно использовать "бейсик скрипт", он не завязан на DOM браузера.


Медвежонок Пятачок   (2012-01-11 11:22:00) [28]

да пофик что они имеют.
главное что твой делфийский процесс не имеет всех тех объектов, которые доступны оригинальному скрипту на странице.

И будут они недоступны тебе даже если ты заюзаешь тот же самый интерпретатор, что использует сам браузер.


Pcrepair   (2012-01-10 21:36:00) [29]

ну в общем кое что прояснилось
c:\windows\system32\msscript.ocx.
этот кусок создает активХ объект ScriptControl из стандартной поставки WSH
и запускает в нем скрипт на исполнение.
похоже TScriptControl не для браузера, получается что браузеры что то свое, встроенное имеют для интерпретации скриптов в ХТМЛ-странице


sniknik   (2012-01-10 20:23:00) [30]

или
begin
 ScriptControl1.Language:= 'JScript';
 ScriptControl1.AddCode('var X = ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion()');
 Memo2.Text:= ScriptControl1.Eval('X');
end;


sniknik   (2012-01-10 20:18:00) [31]

var
 Major, Minor: string;
begin
 ScriptControl1.Language     := 'JScript';
 Major:= ScriptControl1.Eval('ScriptEngineMajorVersion()');
 Minor:= ScriptControl1.Eval('ScriptEngineMinorVersion()');
 Memo2.Text:= Major +'.'+ Minor;
end;

а вот код из html страничек без их обьектной модели... врядли.


Dimka Maslov   (2012-01-10 18:37:00) [32]


>  Pcrepair ©   (10.01.12 17:06) [3]


Не только. Там ещё могут быть ссылки на объекты самой страницы. Например на document.body.anchors или куда то ещё. Для чего нужен TScriptControl я не знаю, но подозреваю, что для выполнения кода, который появляется в процессе использования программы. И вырезка <script> из html-страницы будет работать только в простейших случаях.


Pcrepair   (2012-01-10 18:25:00) [33]

а Windows Script Host то тут причем?
или просто заголовок темы не читали?


Anatoly Podgoretsky   (2012-01-10 17:52:00) [34]

http://podgoretsky.com/ftp/Docs/WSH/


Pcrepair   (2012-01-10 17:06:00) [35]


> Вот ему объекта и не хватает

и что делать?
скрипты разные бывают, но как правило содержат ссылки на файл.js в котором всякого наворочено.
неясно - Компонент TScriptContro нужен для этих дел, или он для чего другого?l


Dimka Maslov   (2012-01-10 16:32:00) [36]


> если взять с закачаной страницы какой нибуть жаба-скрипт
> между тегов


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


sniknik   (2012-01-10 15:27:00) [37]

не в курсе компонента вообще, но MSJavaScript не одно и тоже с JavaScript... вроде бы, а объект явно от MS.
хорошо объясняет
> "Предполагается наличие объекта" или "Предполагается ...что то еще"


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо