Rtl.ScriptLoader.pas 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. unit Rtl.ScriptLoader;
  2. interface
  3. uses types;
  4. Type
  5. TloadedCallBack = Reference to procedure(Data : TObject);
  6. TProc = reference to procedure;
  7. Procedure loadScripts(scripts : TStringDynArray; callback : TLoadedCallback; Data : TObject);
  8. implementation
  9. uses js, web;
  10. Procedure loadScripts(scripts : TStringDynArray; callback : TLoadedCallback; Data : TObject);
  11. Procedure loader (src : String; handler : TProc);
  12. var
  13. head,script : TJSElement;
  14. Procedure DoLoaded;
  15. begin
  16. script.Properties['onload']:=Nil;
  17. script.Properties['onreadystatechange']:=Nil;
  18. Handler;
  19. end;
  20. begin
  21. script:= document.createElement('script');
  22. script['src'] := src;
  23. script.Properties['onload'] := @DoLoaded;
  24. script.Properties['onreadystatechange']:=@DoLoaded;
  25. head:=TJSElement(document.getElementsByTagName('head')[0]);
  26. if Head=Nil then
  27. Head:=Document.body;
  28. head.appendChild( script );
  29. end;
  30. Procedure run;
  31. begin
  32. if Length(Scripts)<>0 then
  33. loader(String(TJSArray(scripts).shift()), @run)
  34. else if Assigned(callback) then
  35. callback(data);
  36. end;
  37. begin
  38. Run;
  39. end;
  40. end.