TransWikia.com

setTimeout не отрабатывает

Stack Overflow на русском Asked by trollDemiurg on January 1, 2022

    document.location.href = '/home';
    console.log('before');
    document.onload = function(){
    setTimeout(function(){
      console.log('fancy')}, 30000);
          };
   console.log('after');

в консоли:

before
after
XHR finished loading: GET "https://-------/home".
Navigated to https://------/home

После редиректа setTimeout не работает, ищу совета. Вместо document.onload = function()… просто setTimout тоже к консоль не пишет.

3 Answers

Можно реализовать загрузку и подмену контента, по аналогии с SPA (Single Page Application).

console.log('before');
let destination = "/home";
fetch(destination).then((response) => response.ok && response.text().then((html) => {
    window.history.pushState({}, "", destination);
    document.getElementsByTagName('html')[0].innerHTML = html;
    setTimeout(() => {
        console.log('fancy')
    }, 30000);
}));
console.log('after');

Answered by renich on January 1, 2022

Когда загружается новая страница, браузер уже не помнит, что было запущено на предыдущей. Один из вариантов решения:

Вместо /home, направить на адрес с каким-нибудь параметром:

document.location.href = '/home?l=0';

И уже на home заранее подготовить скрипт,

let fn_storage = {
  "0": function() {
    console.log("code ?l=0");
  },

  "moo": function() {
    console.log("code ?l=moo");
  },
};

let key = ( window.location.search.match(/l=(.*?)(&|$)/) || [0,0] )[1];
if (key) setTimeout(fn_storage[key], 5000);

Еще, можно использовать localStorage, sessionStorage

Answered by OPTIMUS PRIME on January 1, 2022

Вы редиректите страницу а на старой поставили setTimeout(...); Что вы хотите увидеть она даже если и загрузилась ее уже нет к тому времени.

Если вы хотите запустить скрипт на новой странице. Это будет делать та самая страница и ее скрипт либо делайте как все SPA подгружаете контент и обрабатываете.

Вон подкатили ответ снизу.

Answered by Aziz Umarov on January 1, 2022

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP