Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2013, 05:29   #1
SeemaN_tm
Пользователь
 
Регистрация: 03.02.2011
Сообщений: 16
По умолчанию Вопросы по 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.

Прошу подсказать, в чём проблема ? Как и где надо задать определение ?
Изображения
Тип файла: jpg err.jpg (14.4 Кб, 153 просмотров)
Вложения
Тип файла: rar piwik.rar (72.6 Кб, 7 просмотров)
SeemaN_tm вне форума Ответить с цитированием
Старый 28.04.2013, 09:13   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

скрипт из штмл страницы? ну тогда так не будет работать..
сначала надо ему подсунуть дом браузера и т.д.
eval вне форума Ответить с цитированием
Старый 29.04.2013, 01:27   #3
SeemaN_tm
Пользователь
 
Регистрация: 03.02.2011
Сообщений: 16
По умолчанию

Опиши по подробней если могёшь.
SeemaN_tm вне форума Ответить с цитированием
Старый 29.04.2013, 09:13   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а чо не понятно в этих 2 словах?
eval вне форума Ответить с цитированием
Старый 29.04.2013, 09:25   #5
SeemaN_tm
Пользователь
 
Регистрация: 03.02.2011
Сообщений: 16
По умолчанию

Как подсовывать дом браузера и что именно значит "и так далее"
SeemaN_tm вне форума Ответить с цитированием
Старый 29.04.2013, 09:30   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а вам оно поможет?
вы сначала проанализируйте скрипт на предмет того, зачем ему объектная модель браузера, а потом уже и думать, а то может так оказаться, что толку от этого не будет.
eval вне форума Ответить с цитированием
Старый 29.04.2013, 19:26   #7
SeemaN_tm
Пользователь
 
Регистрация: 03.02.2011
Сообщений: 16
По умолчанию

Скрипт рабочий, а раз так, то для его работы нужно предоставить то что он использует в полном объёме и в независимости для чего это ему. Так как вносить изменения в скрип не целесообразно из-за большого объёма кода и, возможного, изменения логики скрипта изготовителем.
SeemaN_tm вне форума Ответить с цитированием
Старый 29.04.2013, 19:43   #8
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Скрипт рабочий, а раз так, то для его работы нужно предоставить то что он использует в полном объёме и в независимости для чего это ему.
Скрипт интерпретируется БРУЗЕРОМ и он использует DOM модель документа. Вам нужен браузер, фига, вы одним скрипт. интерпретатором обойдетесь.

Как вариант:
Исходный текст страницы и скрипт скармливаете IWebBrowser2(IE движок) и он выдает вам то, что надо.
Человек_Борща вне форума Ответить с цитированием
Старый 29.04.2013, 19:55   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Да пусть он хоть трижды правильным, это не меняет того что ему за какимто понадобился ДОМ, иначе у вас ошибки б не было. А раз так, то есть вероятность что ему еще и пользовательь нужен и мали чего еще ... а у скриптконтрола этого нет, это есть только у браузера, а если это действительно так то - пишите письма мелким почерком.
Андерстенд или продолжаем упорствовать?
eval вне форума Ответить с цитированием
Старый 30.04.2013, 08:33   #10
SeemaN_tm
Пользователь
 
Регистрация: 03.02.2011
Сообщений: 16
По умолчанию

Вот собственно изменённый код в делфи:
PHP код:
procedure TForm1.Button1Click(SenderTObject);
var
ScriptControlTScriptControl;
 
pPar:PSafeArray;
 
varr,piwikTracker:Variant;
 
pkBaseURLString;
 
ScriptLineScriptString;
 
ScriptFileTextFile;
 
DocumentIDispatch;
begin
   AssignFile
(ScriptFile,'piwik.js');
    
Reset(ScriptFile);
if 
IOResult <> 0 then
  begin
    MessageBox
(0,'Ошибка доступа к файлу.','ОШИБКА',0);
    exit;
  
end;

  
// чтение из файла
  
while not EOF(ScriptFile) do
  
begin
    readln
(ScriptFileLineScript); // прочитать строку из файла
    
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([01], 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 терь добавляются.

Появилась другая ошибка по коду дальше. Смотрите прикреплённый скриншот.
Читал, что эта ошибка выскакивает только в IE и во всём том что использует его движок, остальные браузеры вроде бы как отрабатывают без ошибки и в полном объёме.

Привести фрагмент скрипта места на который ругается ?
Кто нить подскажет как пабедить её ? Или придётся самому придумывать ?
Изображения
Тип файла: png err2.png (39.3 Кб, 57 просмотров)
SeemaN_tm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при установке Microsoft Office 2010 Professional Plus 2010 VL [Оригинальный образ Microsoft] syperman96 Microsoft Office Word 2 12.02.2011 12:50
работают ли программы из Microsoft Visual C++ 6.0. в Microsoft Visual 2008? sergey1993 Visual C++ 3 09.02.2011 19:35
Вопросы по if, else? molodoyy Общие вопросы C/C++ 1 25.10.2008 18:55
Microsoft Office Outlook : Вопросы по поиску, календарю, правилам и другие Liker Софт 0 20.11.2007 14:55