|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Вопросы по Microsoft ScriptControl 1.0
Доброго времени суток.
Имеется JavaScript. Из-за большого объёма скрипта, перевести его на делфийский язык не представляется возможным. Решил его пользовать через Microsoft ScriptControl 1.0. Делаю следующим образом. Код:
procedure TForm1.Button1Click(Sender: TObject); var ScriptControl: TScriptControl; pPar:PSafeArray; varr,res:Variant; pkBaseURL: String; Script, LineScript: String; ScriptFile: TextFile; begin AssignFile(ScriptFile,'piwik.js'); Reset(ScriptFile); if IOResult <> 0 then begin MessageBox(0,'Ошибка доступа к файлу.','ОШИБКА',0); exit; end; // чтение из файла while not EOF(ScriptFile) do begin readln(ScriptFile, LineScript); // прочитать строку из файла Script := Script + LineScript+#13+#10; end; Memo1.Text := Script; CloseFile(ScriptFile); ScriptControl := TScriptControl.Create(Self); ScriptControl.Language := 'JavaScript'; ScriptControl.AddCode(Script); varr:=VarArrayCreate([0, 1], varVariant); pkBaseURL := 'http://piwik.rehcusebe.ru/'; varr[0]:= pkBaseURL + 'piwik.php'; varr[1]:=1; pPar:=PSafeArray(TVarData(varr).VArray); res:=ScriptControl.Run('Piwik.getTracker',pPar); ShowMessage(res); FreeAndNil(ScriptControl); end; В момент отработки строчки кода Код:
ScriptControl.AddCode(Script); Так же выкладываю архив сo скриптом. И им же самым, только после приведения кода в божеский вид в формате *.docx. Прошу подсказать, в чём проблема ? Как и где надо задать определение ? Последний раз редактировалось seeman_tm, 25.04.2013 в 14:52. |
#2
|
||||
|
||||
Код:
program Project1; {$APPTYPE CONSOLE} uses ActiveX, ComObj, Windows, Messages, SysUtils, Variants, MSScriptControl_TLB in 'MSScriptControl_TLB.pas'; var ScriptControl: IScriptControl; Parameters: OleVariant; Params: PSafeArray; begin OleInitialize(nil); ScriptControl:=CreateComObject(CLASS_ScriptControl) as IScriptControl; ScriptControl.Language:='javascript'; ScriptControl.AddCode('function showmessage(msg, ttl) {var WScriptShell = new ActiveXObject("WScript.Shell"); WScriptShell.Popup(msg, 60, ttl);}'); Parameters:=VarArrayOf(['Сообщение', 'Заголовок']); Params:=PSafeArray(VarArrayAsPSafeArray(Parameters)); ScriptControl.Run('showmessage', Params); end. Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Благодарю, но темка почемуто покоцалась. И первый пост начал отображаться не тот, вернее не дописанный. Отсюда следует что ты не понял в чём суть вопроса.
Элементарные скрипты и у самого запустить получается. Ну а сейчас, скрипт объёмный и сложный. Можешь поглядеть файлики в архиве выложенном выше. Именно в момент добавления кода в ScriptControl, валится вышеуказанная на картинке ошибка. Последний раз редактировалось seeman_tm, 25.04.2013 в 15:20. |
#4
|
||||
|
||||
Поднимим тему.
И так. Ругань была из-за того, что не была описана переменная через Var.
Так как эта переменная представляет собой некий Object, включающий в себя дополнительные переменные, то встаёт вопрос, а как создать такой объект и передать его в скрипт ? Последний раз редактировалось seeman_tm, 26.04.2013 в 19:30. |
#5
|
||||
|
||||
PHP код:
Пишу программы за еду. __________________ |
#6
|
||||
|
||||
Ага, тнх. Натолкнуло на мысль.
Сделал. Но вот не задача. Появилась другая ошибка. Смотрите прикреплённый скриншот. Вот собственно код в делфи: Код:
procedure TForm1.Button1Click(Sender: TObject); var ScriptControl: TScriptControl; pPar:PSafeArray; varr,piwikTracker:Variant; pkBaseURL: String; Script, LineScript: String; ScriptFile: TextFile; Document: IDispatch; begin AssignFile(ScriptFile,'piwik.js'); Reset(ScriptFile); if IOResult <> 0 then begin MessageBox(0,'Ошибка доступа к файлу.','ОШИБКА',0); exit; end; // чтение из файла while not EOF(ScriptFile) do begin readln(ScriptFile, LineScript); // прочитать строку из файла Script := Script + LineScript+#13+#10; end; Memo1.Text := Script; CloseFile(ScriptFile); ScriptControl := TScriptControl.Create(Nil); ScriptControl.Language := 'JavaScript'; ScriptControl.AddCode('var document= new Object("[object HTMLDocument]");'); ScriptControl.AddCode('var navigator= new Object("[object Navigator]");'); ScriptControl.AddCode('var screen= new Object("[object Screen]");'); ScriptControl.AddCode('var window= new Object("[object Window]");'); ScriptControl.AddCode('window.location = new Object("[object window.location]");'); ScriptControl.AddCode('window.location.href = "[window.location.href]";'); ScriptControl.AddCode(Script); { pkBaseURL := 'http://piwik.rehcusebe.ru/'; varr:=VarArrayCreate([0, 1], varVariant); varr[0]:= pkBaseURL + 'piwik.php'; varr[1]:= 1; pPar:=PSafeArray(TVarData(varr).VArray); // piwikTracker :=ScriptControl.Run('Piwik.getTracker',pPar); } ShowMessage('OK '+piwikTracker); FreeAndNil(ScriptControl); end; Как видно, скрип не запускается. Ошибка сыпется при добавлении кода. Код:
ScriptControl.AddCode(Script); Последний раз редактировалось seeman_tm, 29.04.2013 в 00:10. |
#7
|
||||
|
||||
для начала отладь скрипт в IE с Internet Explorer Developer Tools, а потом его к Delphi подключай.
Пишу программы за еду. __________________ |
#8
|
||||
|
||||
Цитата:
Нет смысла отлаживать по нескольким причинам. 1. Так как он работает в браузере (по крайней мере в Firefox). 2. Он загружается с сайта. 3. Есть вероятность, что сайт внесёт логическое изменение скрипта. 4. Да и мало ли что ещё. |