У меня есть внешний 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;
Удалить скобки из mypopup вар:' SetTimeout (mypopup, 1000); ' – aghidini
@ AndreaGhidini То же поведение, что и раньше. Только в этот раз, когда я нажимаю кнопку второй раз в программе Delphi, наблюдается замедление. – user1580348