![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Доброго времени суток.
Имеется 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. Да и мало ли что ещё. |