11486 sujets

JavaScript, DOM et API Web HTML5

bjr,

Je souhaite que du code soit exécuté lors d'un reload d'une page et pas lors de son premier chargement.

voici mon code

var refresh = function() {
           document.addEventListener('load', function(){
             console.log('page chargée (test)')
           })
         }


if (condition) {
              refresh()
              document.location.reload()
            }


cependant au moment du reload, rien ne se passe (aucun console.log)

merci pour votre aide
Salut

Je ne pense pas qu'il soit possible de distinguer un reload d'un load puisque les deux génèrent le même type d'événement 'load'.
En se servant du sessionStorage.

Window.sessionStorage : https://developer.mozilla.org/fr/docs/Web/API/Window/sessionStorage

window.addEventListener('load', ev => {
    // le DOM est construit et la page web est visible

    // début code du test

    console.log(`La page est chargée ou rechargée : ${ev.type}`);

    // recharge la page web toutes les 5 secondes
    setTimeout(() => {
        document.location.reload();
    }, 5000);

    if (sessionStorage.getItem("visit") == null)
    {
        // première visite de la page
        console.log(`Permière visite de la page`);
    } else {
        // nouvelle visite de la page
        console.log(`Nouvelle visite de la page. Visite précédente : ${sessionStorage.getItem("visit")}`);
    }
    
    sessionStorage.setItem("visit", new Date());

    // fin code du test

}, {
    capture: false,
    passive: true,
    once: false
});
Oui la seul solution c'est le localStorage ou le sessionStorage. il n'y a rien d'autre. surtout si c'est uniquement en JS
merci pour vos réponses. Au final j'ai décidé de ne pas gérer les deux événements séparément mais de vérifier a chaque fois si l'élément que je souhaite est présent.

Par contre jai tjrs un problème, ça fonctionne sans pb au premier reload, mais une fois que la page a reload, au lieu de re-exécuter le code, le navigateur passe a la suite du code.

.evaluate((keywords, color) => {

            setInterval(function() {
            if (document.querySelector('#container')) {

              var ElementCount = document.querySelector('#container').childElementCount

              for(var i=0; i < ElementCount; i++) {      
                var element_product = document.querySelectorAll('#container > article > div > h1 > a')[i].innerText.toLowerCase()
                var element_color = document.querySelectorAll('#container > article > div > p > a')[i].innerText.toLowerCase()
                var regex_product =  new RegExp(keywords)
                var regex_color = new RegExp(color)
          
                if (element_product.match(regex_product) && element_color.match(regex_color)) {
                  clearInterval()
                  document.location.href = document.querySelectorAll('#container > article > div > h1 > a')[i].href
                  break;
                }
                if (!element_product.match(regex_product) && !element_color.match(regex_color) && i===(ElementCount-1)) {
                  document.location.reload
                }
              }  
            }
            }, 100)
    }, keywords, color)


Je précise que j'intervient en tant que client sur la page web et je n'ai donc pas accès au DOM Smiley decu