Питання Як перенаправити на іншу веб-сторінку?


Як я можу перенаправити користувача з однієї сторінки в іншу за допомогою jQuery чи чистого JavaScript?


7737
2018-02-02 12:54


походження


Я постійно бачу обидва вікна.location = url; and window.location.href = url; Як вони різні? Чи вони? До речі, я не знав про window.location.replace (url). Приємно - David M. Miller
window.location такий же, як і window.location.href, з точки зору поведінки. window.location повертає об'єкт. Якщо .href не встановлено window.location за замовчуванням змінити параметр .href. Висновок: використовувати будь-який з них добре. - Raptor
var url = "ім'я веб-сайту" $ (місце розташування) .attr ('href', url); - Mad Scientist
@MadScientist Це зворотний спосіб зробити це. Об'єкт місцеположення не є елементом HTML і використовує об'єкт jquery, щоб встановити, що воно просто здається неправильним. Чому б ви це використали, коли прямий код JS настільки простий? - Juan Mendes
Чому ви хочете перенаправити? Форма входу не повинна бути подана? І навіть якщо на цільовій сторінці немає логіки, ви все одно зможете надіслати форму на іншу сторінку. - Dimt


Відповіді:


Не просто перенаправляти за допомогою jQuery

jQuery не є необхідним, і window.location.replace(...) найкраще змоделювати перенаправлення HTTP.

window.location.replace(...) краще, ніж використовувати window.location.href, оскільки replace() не зберігає вихідну сторінку в історії сеансів, тобто користувач не застряє в незмінному фіаско зворотного кнопки.

Якщо ви хочете імітувати когось, хто натискає посилання, використовуйте    location.href

Якщо ви хочете імітувати перенаправлення HTTP, скористайтеся командою location.replace

Наприклад:

// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");

// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";

12949
2018-02-03 04:24



у випадку кнопки відправки додати результат false; також всередині вашої функції - Abhi
Питання стосовно JavaScript особливо, але це може бути варто зазначити, що мета-оновлення може бути використане як відмова знову у випадку, якщо користувач має JavaScript - Hoppe
@ NicolòMartini Якщо (IE) document.write (""); - Jeff Noel
@ NicolòMartini Я розмістив спосіб не втратити REFERRER нижче, якщо ви хочете перевірити це! - Mark Pieszak - DevHelp.Online
Якщо ви вже використовуєте jQuery, просто використовуйте $(location).attr('href',url);. window.location.href мабуть, у деяких браузерах виникає непостійна поведінка, насправді, вона не працює в моїй версії Firefox. Я чув, що говорять про налаштування window.location безпосередньо не працює в версіях IE. - Noz


УВАГА: Ця відповідь була представлена ​​лише як можливе рішення; це очевидно ні найкраще рішення, оскільки це вимагає jQuery. Замість цього віддайте перевагу чистому рішень JavaScript.

$(location).attr('href', 'http://stackoverflow.com')

1473
2017-10-28 16:35



Це та літеральна відповідь на питання. Якщо ви вже використовуєте Jquery і, отже, вже завантажили, то буде ефективнішою пропускна здатність і, звичайно, зрозумілою для використання ярлика - barrymac
Що більш важливо, чи існує спосіб зробити це з jQuery, що є абстрактним? Це просто обгортка для window.location.href = url; Але якщо jQuery мала певну функцію, то, якщо window.location.href = url; не збирається працювати в поточному середовищі (браузер, ОС тощо), ядро ​​jQuery може компенсувати? - Chris
Примушення jQuery в рівняння таким способом просто смішно і безглуздо, особливо з тих пір window.location не є елементом і тому не має атрибутів. - Tim Down
@CoffeeAddict, 2-річний коментар, але будь ласка, пораньте мене, як це зробити location.href = 'http://stackoverflow.com'; є більш розмовним, ніж альтернатива в відповіді тут? Навіть якщо ви видалите змінну, це все ще більш розмовна та більше символів для використання jQuery для цього. - rlemon
@deltaray Це ні Інший спосіб переспрямувати, як сказано вище, це безглузді обгортки навколо об'єкта місцеположення, який навіть не є елементом! Це мене нагадує i.stack.imgur.com/ssRUr.gif - JCM


Стандартний "ванільний" спосіб JavaScript для перенаправлення сторінки:

window.location.href = 'newPage.html';


Якщо ви тут, бо ти є програє HTTP_REFERER при перенаправленні продовжуйте читати:


Наступний розділ для тих, хто використовує HTTP_REFERER як один з багатьох захищених заходів (хоча це не є великою захисною мірою). Якщо ви використовуєте Internet Explorer 8 або нижче, ці змінні втрачаються при використанні будь-якої форми перенаправлення сторінки JavaScript (location.href тощо).

Нижче ми збираємося запровадити альтернативу для IE8 і нижче щоб ми не втратили HTTP_REFERER. В іншому випадку ви майже завжди можете просто користуватися window.location.href.

Тестування проти HTTP_REFERER (Вставка URL, сеанс тощо) може бути корисним, щоб сказати, чи є запит законним. (Примітка: існують також способи обходу / перекручування цих реферерів, як це зазначено в посиланнях droop у коментарях)


Просте крос-браузерне тестування (резервне копіювання window.location.href для Internet Explorer 9+ та всіх інших браузерів)

Використання: redirect('anotherpage.aspx');

function redirect (url) {
    var ua        = navigator.userAgent.toLowerCase(),
        isIE      = ua.indexOf('msie') !== -1,
        version   = parseInt(ua.substr(4, 2), 10);

    // Internet Explorer 8 and lower
    if (isIE && version < 9) {
        var link = document.createElement('a');
        link.href = url;
        document.body.appendChild(link);
        link.click();
    }

    // All other browsers can use the standard window.location.href (they don't lose HTTP_REFERER like Internet Explorer 8 & lower does)
    else { 
        window.location.href = url; 
    }
}

509
2017-07-27 14:41



Примітка для ноги: перевірка реферера як заходи безпеки є хитрим рішенням. duckduckgo.com/?q=referrer+spoofing - droope
Якщо у URL-адресі реферера є ідентифікатор сеансу HTTP GET, його можна використовувати для перевірки відповідності сеансу для дійсності. - Andrew Fox
@ mcpDESIGNS Ви впевнені, що спробували використати location.assign? Я використовую у своєму додатку з IE8, і я не втрачаю HTTP_REFERER заголовок - Buzinas
Принаймні ще в 2012 році він не працював, можливо, пізніше патчі IE8 виправили його - це добре послухати, хоча! - Mark Pieszak - DevHelp.Online


Використання:

// window.location
window.location.replace('http://www.example.com')
window.location.assign('http://www.example.com')
window.location.href = 'http://www.example.com'
document.location.href = '/path'

// window.history
window.history.back()
window.history.go(-1)

// window.navigate; ONLY for old versions of Internet Explorer
window.navigate('top.jsp')


// Probably no bueno
self.location = 'http://www.example.com';
top.location = 'http://www.example.com';

// jQuery
$(location).attr('href','http://www.example.com')
$(window).attr('location','http://www.example.com')
$(location).prop('href', 'http://www.example.com')

349
2018-01-28 04:28



window.navigate є старим лише для IE (Firefox / Chrome не підтримує цю версію). Якщо ви хочете перерахувати всі параметри, не забувайте про це document.location. - Rob W
Це не пояснює нічого зовсім. Що хтось повинен вибрати? Вибирати один із випадків зі списку? Крім того, що це додає до існуючих відповідей? - Léo Lam
Це відповідь В даний час обговорюється на мета - Bergi
@ LéoLam Ось чому існує пошукова система під назвою Google. :-) Ви можете шукати кожен з них у Google і знаходити різницю. Ви не хочете, щоб вибрати один випадковим чином. - I am the Most Stupid Person
@IamtheMostStupidPerson саме моя точка. Відповідь марно. - Léo Lam


Це працює для кожного браузера:

window.location.href = 'your_url';

269
2017-10-22 23:45



Ви також можете це зробити document.location.replace(redirectURL) якщо ви не хочете, щоб перша сторінка була в історії веб-переглядача - jazzcat


Це допоможе, якщо ви були трохи більш описовими в тому, що ви намагаєтесь зробити. Якщо ви намагаєтеся генерувати сторінки-дані, існують деякі варіанти того, як ви це робите. Ви можете створювати окремі посилання для кожної сторінки, до якої ви хочете отримати прямий зв'язок.

<a href='/path-to-page?page=1' class='pager-link'>1</a>
<a href='/path-to-page?page=2' class='pager-link'>2</a>
<span class='pager-link current-page'>3</a>
...

Зауважте, що поточна сторінка в прикладі обробляється по-різному в коді та CSS.

Якщо ви хочете, щоб виправлені дані були змінені за допомогою AJAX, саме там з'явиться jQuery. Що б ви зробили, це додати обробник кліків до кожного тегу якоря, що відповідає іншою сторінці. Цей обробник кліків викличе який-небудь код jQuery, що йде, і виводить наступну сторінку через AJAX і оновлює таблицю новими даними. У наведеному нижче прикладі передбачається, що у вас є веб-служба, яка повертає нові дані сторінки.

$(document).ready( function() {
    $('a.pager-link').click( function() {
        var page = $(this).attr('href').split(/\?/)[1];
        $.ajax({
            type: 'POST',
            url: '/path-to-service',
            data: page,
            success: function(content) {
               $('#myTable').html(content);  // replace
            }
        });
        return false; // to stop link
    });
});

253
2018-02-02 13:18





Я теж це думаю location.replace(URL) це найкращий спосіб, але якщо ви хочете повідомити пошукові системи про переспрямування (вони не аналізують код JavaScript, щоб побачити перенаправлення), ви повинні додати rel="canonical" метатегів на вашому веб-сайті.

Додавання секції noscript з метатегом HTML-оновлення у це також є гарним рішенням. Я пропоную вам використовувати це Інструмент перенаправлення JavaScript щоб створити перенаправлення. Вона також має підтримку Internet Explorer для передачі реферера HTTP.

Приклад коду без затримки виглядає так:

<!-- Place this snippet right after opening the head tag to make it work properly -->

<!-- This code is licensed under GNU GPL v3 -->
<!-- You are allowed to freely copy, distribute and use this code, but removing author credit is strictly prohibited -->
<!-- Generated by http://insider.zone/tools/client-side-url-redirect-generator/ -->

<!-- REDIRECTING STARTS -->
<link rel="canonical" href="https://yourdomain.com/"/>
<noscript>
    <meta http-equiv="refresh" content="0;URL=https://yourdomain.com/">
</noscript>
<!--[if lt IE 9]><script type="text/javascript">var IE_fix=true;</script><![endif]-->
<script type="text/javascript">
    var url = "https://yourdomain.com/";
    if(typeof IE_fix != "undefined") // IE8 and lower fix to pass the http referer
    {
        document.write("redirecting..."); // Don't remove this line or appendChild() will fail because it is called before document.onload to make the redirect as fast as possible. Nobody will see this text, it is only a tech fix.
        var referLink = document.createElement("a");
        referLink.href = url;
        document.body.appendChild(referLink);
        referLink.click();
    }
    else { window.location.replace(url); } // All other browsers
</script>
<!-- Credit goes to http://insider.zone/ -->
<!-- REDIRECTING ENDS -->

215
2018-04-25 10:12