2015-08-19 2 views
0

У меня есть внешний JavaScript файл mypapopup.js с этим содержанием:setTimeout не работает при введении JavaScript?

function mypopup() { 
alert("Hello stackoverflow") 
} 

в форме приложения Delphi VCL X Е8, с TEmbeddedWB.ExecScript я вводить этот JavaScript в загруженном документе в EmbeddedWB:

procedure TForm1.btnPopupJSClick(Sender: TObject); 
begin 
    EmbeddedWB1.ExecScript('var script = document.createElement(''script'');' + 
          'script.src = "mypapopup.js";' + 
          'script.setAttribute(''type'', ''text/javascript'');' + 
          'document.getElementsByTagName(''head'')[0].appendChild(script);' + 
          'setTimeout(mypopup(), 1000);' 
          ,'JavaScript'); 
end; 

Обратите внимание, что с этим кодом в раздел HEAD добавляется тег скрипта, который ссылается на внешний файл JavaScript mypapopup.js.

Функция mypopup с внешнего файла JavaScript вызывается с задержкой в ​​1000 мс.

После нажатия кнопки btnPopupJS в моей программе Delphi ничего не происходит.

Только после нажатия кнопки btnPopupJS в моей программе Delphi во второй раз всплывающее окно JavaScript выполняется БЕЗ ЗАДЕРЖКИ!

Это также случай, когда я увеличиваю задержку setTimeout, например. 5000 мс, где также после нажатия кнопки второй раз всплывающее окно выполняется БЕЗ ЗАДЕРЖКИ.

Так есть способ подождать, пока внешний JavaScript не будет загружен, а затем автоматически выполнит функцию mypopup?

EDIT: Я нашел решение, но я не знаю, является ли это оптимальное решение:

procedure TForm1.btn1Click(Sender: TObject); 
var 
    t, tt: Int64; 
begin 
    EmbeddedWB1.ExecScript('var script = document.createElement(''script'');' + 
          'script.src = "mypapopup.js";' + 
          'script.setAttribute(''type'', ''text/javascript'');' + 
          'document.getElementsByTagName(''head'')[0].appendChild(script);' 
          // + 'setTimeout(mypopup, 1000);' 
          ,'JavaScript'); 

    t := TThread.GetTickCount; 
    repeat 
    tt := TThread.GetTickCount - t; 
    Application.ProcessMessages; 
    until tt > 1000; 

    EmbeddedWB1.ExecScript('mypopup();', 'JavaScript'); 
end; 
+1

Удалить скобки из mypopup вар:' SetTimeout (mypopup, 1000); ' – aghidini

+0

@ AndreaGhidini То же поведение, что и раньше. Только в этот раз, когда я нажимаю кнопку второй раз в программе Delphi, наблюдается замедление. – user1580348

ответ

0

Я думаю, что будет ссылка ошибка при выполнении setTimeout(mypopup, 1000);, поскольку внешний JS файл пока не загружен, так что mypopup неизвестно при выполнении этой строки.

Пожалуйста, измените

setTimeout(mypopup, 1000); 

в

setTimeout(function() { mypopup(); }, 1000); 
0

я тоже была такая же проблема. Я эту проблему растворяется с этим кодом:

window.setTimeout(function(){ mypopup();},5000);

может быть `s ПОЛЕЗНЫЕ для вас

Смежные вопросы