![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компонент TScriptControl. как его готовить?
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.
хорошо объясняет
> "Предполагается наличие объекта" или "Предполагается ...что то еще"