Как сразу сделать редирект с помощью JavaScript

Как я могу заставить javascript немедленно остановить выполнение скрипта и перейти на другую страницу. Учти это:

<html>
<head>
    <script>
        function onload()
            {
                alert('before');
                window.location.href = 'http://google.com';
                alert('after redirect');
            }
    </script>
</head>
<body onload = "onload();">
    Hello World!
</body>
</html>

Второе предупреждающее сообщение срабатывает всегда.

ну вы называете это onload, поэтому загружается вся страница ....

epascarello 19.03.2018 19:35

Отвечает ли это на ваш вопрос? Как мне перенаправить на другую веб-страницу?

mhrabiee 04.12.2019 12:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
8 595
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуйте вернуть значение из первой функции, и если пользователь вошел в систему, верните true. Я надеюсь, что это поможет вам.

function init() {
  if (checkIfLoggedIn()) {
    getUserInfo(); // I would expect this to not run if the user was not logged in
  }
}

function checkIfLoggedIn() {
  if (loggedIn() === false) {
    window.location.href = "/login.html";
  } else {
    return true;
  }
}

function getUserInfo() {
  var username = getUsername(); // throws exception if not logged in
  var email = getEmail(); // throws exception if not logged in
  // etc. etc.
}

Я согласен с вами, что это было бы идеальным быстрым исправлением, но, как упоминалось в моем вопросе, я не могу засорять свой код if (checkIfLoggedIn ()) ~ мой фактический код намного сложнее, чем приведенный выше упрощенный пример, вместо этого я нужно, чтобы страница перестала выполняться, мой вопрос был: есть ли версия перенаправления, которая делает это?

Kyle B 20.03.2018 13:49

Можно ли использовать мета-обновление? Это немедленно перенаправит страницу и остановит выполнение дальнейшего кода. Это не решение для JavaScript, будет ли оно работать? Поместите это в заголовок своей HTML-страницы: <meta http-equiv = "refresh" content = "5;url=http://newUrl.com/" />

travelsize 20.03.2018 14:50

@KyleB, я понимаю вашу точку зрения, но я считаю, что код немедленно вызывает вторую функцию, чтобы получить данные профиля пользователя, поэтому должно быть условие, когда проверять информацию профиля.

Farhan 20.03.2018 18:00

Вы вызываете getUserInfo() без каких-либо условных обозначений. Таким образом, эта функция будет вызываться при загрузке страницы, поскольку вы не наложили ограничений на этот вызов функции. Следовательно, код все еще работает.

Возможно, именно это и предполагается в первом блоке вашего фрагмента:

if (checkIfLoggedIn()) {
    getUserInfo();
}

Таким образом, getUserInfo будет вызываться только в том случае, если checkIfLoggedIn вернет true. Как вы это написали, getUserInfo также запускается при загрузке страницы.

Если вы не хотите засорять свой код, вы можете нарушить все правила и использовать исключение:

function init()
{
  checkIfLoggedIn();
  getUserInfo(); // I would expect this to not run if the user was not logged in
}

function checkIfLoggedIn()
{
  if (loggedIn() === false) {
    window.location.href = "/login.html";
    throw new Error('Kill all code running after me');
  }
}

function getUserInfo()
{
  var username = getUsername(); // throws exception if not logged in
  var email = getEmail(); // throws exception if not logged in
  // etc. etc.
}

function loggedIn() {
  return false;
}


init();

Вызванное исключение предотвратит выполнение всего остального кода.

OK. It is ugly and breaks so many best practice rules. But it should work.

Или вы можете использовать обработку исключений для другого кода:

function init()
{
  checkIfLoggedIn();
  getUserInfo(); // I would expect this to not run if the user was not logged in
}

function checkIfLoggedIn()
{
  if (loggedIn() === false)
    window.location.href = "/login.html";
}

function getUserInfo()
{
  try {
    var username = getUsername();
    var email = getEmail();
    // etc. etc.
  }

  catch(ex) {
    // Don't do anything here unless you really need to
  }
}

function loggedIn() {
  return false;
}


init();
Ответ принят как подходящий

Я нашел ответ сегодня, когда искал что-то еще:

Несмотря на то, что window.location.href установлен и окно находится в середине перенаправления, выполнение кода продолжается в большинстве браузеров:

function onload()
{
    console.info('before');
    window.location.href = 'newpage.html';
    console.info('after redirect 1');
    console.info('after redirect 2');
    console.info('after redirect 3');
}

after redirect 1, after redirect 2 и after redirect 3 по-прежнему регистрируются на консоли, даже если страница перенаправляется. Однако, поскольку init() является функцией верхнего уровня, я могу return; из функции и остановить выполнение кода.

  <script>
    function init()
    {
      if (checkIfLoggedIn() === false)
          return; // <-- stops following code from executing and allows return to proceed

      getUserInfo();
    }

    function checkIfLoggedIn()
    {
      var loggedIn = loggedIn();
      if (loggedIn === false)
        window.location.href = "/login.html";
      return loggedIn;
    }

    ...
  </script>
</head>
<body onload = "init()">
  ...

Другие вопросы по теме