Results 1 to 8 of 8

Thread: CEF4Delphi vraag (chromium)

  1. #1

    CEF4Delphi vraag (chromium)

    Ik gebruik chromium middels CEF4Delphi pakket, en dat werkt veel beter dan de standaard TWebbrowser. Alleen voer ik een aantal acties uit op javascript, maar is er een goede manier om te zien wanneer javascript volledig geladen is ? sommige pagina's werken met angular - en bij de onpageloaded event is de html wel volledig geladen maar de javascript nog niet, ik heb nu een timer die controleert of javascript geladen is maar is er een betere manier?

  2. #2
    Hoe bedoel je, geladen?

    V.z.i.w. (op basis van JavaScript-ervaring) zijn er twee events. Er is DOMContentLoaded and (Page)Loaded. De eerste krijg je zodra de DOM (de HTML zelf) binnen is. De tweede krijg je als ook de CSS en de plaatjes ingeladen zijn.

    Scripts worden direct ingeladen en uitgevoerd, maar het is mogelijk dat zo'n script weer een event handler zet (of zelfs een timer) waarin het nog meer scripts gaat laden en nog meer werk gaat doen. Angular heeft (of had, Angular2 is weer compleet anders) daar eigen events voor.

    In principe kan JavaScript blijven draaien en dingen blijven laden, dus het is lastig, zo niet onmogelijk om te zeggen wanneer dat 'klaar' is.
    1+1=b

  3. #3
    Klopt - maar als ik een pagina laadt die op angular of vuejs draait - duurt het een 1/2 tal seconden voordat angular of $vue beschikbaar zijn. Ik heb nu al even een javascript oplossing gevonden:
    HTML Code:
    1. function waitFor(condition, callback) {
    2.     if(!condition()) {
    3.         window.setTimeout(waitFor.bind(null, condition, callback), 100);
    4.     } else {
    5.         callback();
    6.     }
    7. }
    8.  
    9. function testAngular () {
    10.     return window.angular !== null && window.angular !== undefined
    11. }
    12.  
    13. function executeOnAngularLoaded () {
    14.     console.log('Yes angular is loaded!')
    15. }
    16.  
    17. waitFor(() => testAngular, () => executeOnAngularLoaded())

    Denk dat dit de beste manier is - nu probeerde ik in delphi uit te vinden wanneer javascript volledig geladen is om een aantal acties te kunnen uitvoeren, nu laat ik in javascript zelf een timeout lopen welke nagaat of angular beschikbaar is - en voert dan het stuk code uit..

    Mocht iemand betere manier weten - is zeker welkom
    Last edited by Reidinga; 12-Jun-19 at 15:33.

  4. #4
    Als je specifiek wilt wachten op Angular, dan zal dit wel werken, ja.
    1+1=b

  5. #5
    Dat was inderdaad de bedoeling omdat ik een aantal zaken automatiseer wat niet gaat door dat direct op api niveau te doen - ik ben afhankelijk van een bestaand systeem, maar willen er toch een deel van automatiseren. In plaats van dus de velden te vullen, kies ik ervoor om direct angular aan te spreken om de gegevens op de scope te updaten (apply) - en daarmee het formulier te verzenden, hiervoor moest ik dus wachten tot angular beschikbaar is. Nu is dit niet de mooiste oplossing, maar werkt nu toch..

  6. #6
    Waarom een setTimeOut() in een loop?

    Waarom niet gewoon een van de events van Angular zelf gebruiken?
    Als je toch javascript kunt injecteren kun je ook de code injecteren voor die event, toch?

    https://stackoverflow.com/questions/...document-ready

    PS. Wat je nu doet, wachten tot Angular beschikbaar is, hoeft nog niet te betekenen dat al jouw elementen van de pagina ook daadwerkelijk gereed zijn. Met een .ready() op het laatste element zou dat wel het geval moeten zijn.

  7. #7
    Dankje - dat is inderdaad een veel betere oplossing!

  8. #8
    Quote Originally Posted by Reidinga View Post
    Ik gebruik chromium middels CEF4Delphi pakket, en dat werkt veel beter dan de standaard TWebbrowser. Alleen voer ik een aantal acties uit op javascript, maar is er een goede manier om te zien wanneer javascript volledig geladen is ?
    crmLoadEnd

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •