Làm cách nào để chuyển hướng đến một trang web khác?


7723

Làm cách nào tôi có thể chuyển hướng người dùng từ trang này sang trang khác bằng jQuery hoặc JavaScript thuần?


147
Tôi tiếp tục nhìn thấy cả window.location = url; và window.location.href = url; Họ khác nhau như thế nào? Có phải họ không? BTW, tôi không biết về window.location.replace (url). Đẹp.
David M. Miller

100
window.locationlà giống như window.location.href, về mặt hành vi. window.locationtrả về một đối tượng Nếu .hrefkhông được đặt, window.locationmặc định để thay đổi tham số .href. Kết luận: Sử dụng một trong hai là tốt.
Raptor

10
var url = "tên trang web" $ (vị trí) .attr ('href', url);
Nhà khoa học điên

31
@MadSellectist Đó là một cách làm ngược lại. Đối tượng vị trí không phải là một phần tử HTML và sử dụng đối tượng jquery để đặt nó có vẻ sai. Tại sao bạn sẽ sử dụng nó khi mã JS thẳng rất đơn giản?
Juan Mendes

1
Tại sao bạn muốn chuyển hướng? Các hình thức đăng nhập không nên nộp? Và ngay cả khi không có logic trong trang đích, bạn vẫn có thể gửi biểu mẫu đến một trang khác.
Giảm

Câu trả lời:


14809

Một người không chỉ đơn giản là chuyển hướng bằng jQuery

jQuery là không cần thiết và window.location.replace(...)sẽ mô phỏng tốt nhất một chuyển hướng HTTP.

window.location.replace(...)tốt hơn so với việc sử dụng window.location.href, vì replace()không giữ trang gốc trong lịch sử phiên, có nghĩa là người dùng sẽ không bị kẹt trong một fiasco nút quay lại không bao giờ kết thúc.

Nếu bạn muốn mô phỏng ai đó nhấp vào liên kết, hãy sử dụng location.href

Nếu bạn muốn mô phỏng chuyển hướng HTTP, hãy sử dụng location.replace

Ví dụ:

// 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";

// Another method for doing redirecting with JavaScript is this:
window.location = "https://stackoverflow.com";

78
trong trường hợp nút gửi thêm trả về false; cũng trong chức năng của bạn
Abhi

134
Câu hỏi là về javascript cụ thể, nhưng có thể đáng chú ý rằng việc làm mới meta có thể được sử dụng làm lỗi trở lại trong trường hợp người dùng bị vô hiệu hóa javascript
Hoppe

22
@ NicolòMartini If (IE) document.write ("");
Jeff Noel

48
Nếu bạn đã sử dụng jQuery, chỉ cần sử dụng $(location).attr('href',url);. window.location.hrefDường như có hành vi bất tiện trong một số trình duyệt, trên thực tế, nó hoàn toàn không hoạt động trong phiên bản Firefox của tôi. Tôi đã nghe nói về việc cài đặt window.locationtrực tiếp không hoạt động trong các phiên bản IE.
Noz

8
"Tốt hơn" nên được loại bỏ. Như đã nêu sau trong câu trả lời, giải pháp tốt nhất là tình huống. OP không hỏi "làm cách nào tôi có thể mô phỏng chuyển hướng HTTP bằng Javascript ..."
MadMaardigan

1684

CẢNH BÁO: Câu trả lời này chỉ đơn thuần được cung cấp như một giải pháp khả thi; nó rõ ràng không phải là giải pháp tốt nhất, vì nó yêu cầu jQuery. Thay vào đó, hãy thích giải pháp JavaScript thuần túy.

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

63
Đây là câu trả lời theo nghĩa đen cho câu hỏi. Nếu bạn đã sử dụng Jquery và do đó đã tải xong thì sẽ hiệu quả hơn về băng thông và tất nhiên sẽ rõ ràng hơn khi sử dụng phím tắt
barrymac

27
Quan trọng hơn, có cách nào để làm điều này với jQuery bị bỏ qua không? Đây chỉ là một trình bao bọc cho window.location.href = url; Nhưng nếu jQuery có một số chức năng đó, nếu window.location.href = url; Không hoạt động trong môi trường hiện tại (trình duyệt, HĐH, v.v.) Lõi jQuery có thể bù?
Chris

271
Việc buộc jQuery vào phương trình theo cách này thật vô lý và vô nghĩa, đặc biệt vì window.locationnó không phải là một phần tử và do đó không có thuộc tính.
Tim Down

10
Tôi bằng cách nào đó nghi ngờ điều này vẫn hoạt động với các phiên bản jQuery gần đây, nơi .attr()thực sự đặt các thuộc tính (tức là .setAttribute())
ThiefMaster

156
@deltaray Đây không phải là một cách khác để chuyển hướng, như đã nói ở trên, nó là một trình bao bọc vô nghĩa xung quanh đối tượng vị trí, mà thậm chí không phải là một yếu tố! Điều này làm tôi nhớ đến i.stack.imgur.com/ssRUr.gif
JCM

676

Cách JavaScript "vanilla" tiêu chuẩn để chuyển hướng một trang

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

Hoặc đơn giản hơn: (vì windowlà Toàn cầu)

location.href = 'newPage.html';

Nếu bạn ở đây vì bạn đang mất HTTP_REFERER khi chuyển hướng, hãy tiếp tục đọc:

(Nếu không thì bỏ qua phần cuối cùng này)


Phần sau đây dành cho những người sử dụng HTTP_REFERERnhư một trong nhiều biện pháp bảo mật (mặc dù đây không phải là biện pháp bảo vệ tuyệt vời). Nếu bạn đang sử dụng Internet Explorer 8 trở xuống, các biến này sẽ bị mất khi sử dụng bất kỳ hình thức chuyển hướng trang JavaScript nào (location.href, v.v.).

Dưới đây chúng tôi sẽ triển khai một giải pháp thay thế cho IE8 và thấp hơn để chúng tôi không mất HTTP_REFERER. Nếu không, bạn hầu như luôn có thể sử dụng window.location.href.

Thử nghiệm đối với HTTP_REFERER(dán URL, phiên, v.v.) có thể giúp cho biết yêu cầu có hợp pháp hay không. ( Lưu ý: cũng có những cách để giải quyết / giả mạo những người giới thiệu này, như được lưu ý bởi liên kết của droop trong các bình luận)


Giải pháp kiểm tra trình duyệt chéo đơn giản (dự phòng cho window.location.href cho Internet Explorer 9+ và tất cả các trình duyệt khác)

Sử dụng: 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; 
    }
}

60
Lưu ý chân: kiểm tra cho người giới thiệu như một biện pháp bảo mật là một giải pháp tệ hại. duckduckgo.com/?q=referrer+spaggering
droope

Nếu bạn có ID phiên HTTP GET trong URL của người giới thiệu, nó có thể được sử dụng để kiểm tra tính hợp lệ của phiên.
Andrew Fox

@mcpDESIGNS bạn có chắc chắn đã thử sử dụng location.assignkhông? Tôi sử dụng trong ứng dụng của mình với IE8 và tôi không bị mất HTTP_REFERERtiêu đề.
Buzinas

Ít nhất là vào năm 2012 nó không hoạt động, có thể các bản vá IE8 sau đó đã sửa nó - thật tuyệt khi nghe điều đó!
Mark Pieszak - Trilon.io

1
Việc bạn đề cập đến HTTP_REFERER đã giúp tôi hiểu vấn đề tôi gặp phải với window.open và tôi đã tìm thấy một giải pháp ở đây: stackoverflow.com/questions/7580613/ . Nhân tiện, tôi đang gặp vấn đề trong IE11!
Dov Miller

427

Có rất nhiều cách để làm điều này.

// 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')

8
window.navigatelà chỉ dành cho IE cũ (Firefox / Chrome không hỗ trợ điều này). Nếu bạn muốn liệt kê tất cả các tùy chọn, đừng quên document.location.
Rob W

document.location = document.referrer; Vui lòng thêm nó trong danh sách. Điều này không hoạt động như History.back thay vào đó làm cho trang Làm mới một lần nữa.
Ali Humayun

.attr () sẽ không hoạt động trên jQuery 3.0.0. sử dụng .val () thay thế.
Rivalus

4
@ LéoLam Đó là lý do tại sao có một công cụ tìm kiếm được gọi là Google. :-) Bạn có thể tìm kiếm từng cái trên Google và tìm sự khác biệt. Bạn không muốn chọn ngẫu nhiên.
Tôi là người ngu ngốc nhất


330

Điều này hoạt động cho mọi trình duyệt:

window.location.href = 'your_url';

8
Bạn cũng có thể làm document.location.replace(redirectURL)nếu bạn không muốn trang đầu tiên xuất hiện trong lịch sử trình duyệt
jazzcat

298

Nó sẽ giúp nếu bạn mô tả nhiều hơn một chút về những gì bạn đang cố gắng làm. Nếu bạn đang cố gắng tạo dữ liệu phân trang, có một số tùy chọn trong cách bạn thực hiện việc này. Bạn có thể tạo các liên kết riêng cho từng trang mà bạn muốn có thể truy cập trực tiếp.

<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>
...

Lưu ý rằng trang hiện tại trong ví dụ được xử lý khác nhau trong mã và với CSS.

Nếu bạn muốn thay đổi dữ liệu phân trang thông qua AJAX, thì đây là nơi jQuery sẽ đến. Điều bạn sẽ làm là thêm một trình xử lý nhấp chuột vào mỗi thẻ neo tương ứng với một trang khác nhau. Trình xử lý nhấp chuột này sẽ gọi một số mã jQuery đi và tìm nạp trang tiếp theo thông qua AJAX và cập nhật bảng với dữ liệu mới. Ví dụ dưới đây giả định rằng bạn có một dịch vụ web trả về dữ liệu trang mới.

$(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
    });
});

252

Tôi cũng nghĩ đó location.replace(URL)là cách tốt nhất, nhưng nếu bạn muốn thông báo cho các công cụ tìm kiếm về chuyển hướng của bạn (họ không phân tích mã JavaScript để xem chuyển hướng), bạn nên thêm rel="canonical"thẻ meta vào trang web của mình.

Thêm một phần noscript với thẻ meta làm mới HTML trong đó, cũng là một giải pháp tốt. Tôi khuyên bạn nên sử dụng công cụ chuyển hướng JavaScript này để tạo chuyển hướng. Nó cũng có hỗ trợ Internet Explorer để vượt qua người giới thiệu HTTP.

Mã mẫu không chậm trễ trông như thế này:

<!-- 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 -->

228

Nhưng nếu ai đó muốn chuyển hướng trở lại trang chủ thì anh ta có thể sử dụng đoạn mã sau.

window.location = window.location.host

Sẽ rất hữu ích nếu bạn có ba môi trường khác nhau là phát triển, dàn dựng và sản xuất.

Bạn có thể khám phá cửa sổ này hoặc đối tượng window.location bằng cách chỉ đặt những lời này trong Chrome Console hoặc Firebug Bảng điều khiển 's.


window.location.replace (window.location.protatio + "//" + window.location.host)
moala

13
thậm chí đơn giản hơn: window.location = '/'
Iftah

213

JavaScript cung cấp cho bạn nhiều phương thức để truy xuất và thay đổi URL hiện tại được hiển thị trên thanh địa chỉ của trình duyệt. Tất cả các phương thức này sử dụng đối tượng Location, là một thuộc tính của đối tượng Window. Bạn có thể tạo một đối tượng Vị trí mới có URL hiện tại như sau ..

var currentLocation = window.location;

Cấu trúc cơ bản của một URL

<protocol>//<hostname>:<port>/<pathname><search><hash>

nhập mô tả hình ảnh ở đây

  1. Giao thức - Chỉ định tên giao thức được sử dụng để truy cập tài nguyên trên Internet. (HTTP (không có SSL) hoặc HTTPS (có SSL))

  2. tên máy chủ - Tên máy chủ chỉ định máy chủ sở hữu tài nguyên. Ví dụ: www.stackoverflow.com. Một máy chủ cung cấp dịch vụ sử dụng tên của máy chủ lưu trữ.

  3. cổng - Số cổng được sử dụng để nhận biết một quy trình cụ thể mà Internet hoặc tin nhắn mạng khác sẽ được chuyển tiếp khi đến máy chủ.

  4. pathname - Đường dẫn cung cấp thông tin về tài nguyên cụ thể trong máy chủ mà máy khách Web muốn truy cập. Ví dụ: stackoverflow.com/index.html.

  5. truy vấn - Chuỗi truy vấn tuân theo thành phần đường dẫn và cung cấp một chuỗi thông tin mà tài nguyên có thể sử dụng cho mục đích nào đó (ví dụ: làm tham số cho tìm kiếm hoặc dưới dạng dữ liệu cần xử lý).

  6. hàm băm - Phần neo của URL, bao gồm dấu băm (#).

Với các thuộc tính đối tượng Vị trí này, bạn có thể truy cập tất cả các thành phần URL này

  1. băm -Sets hoặc trả về phần neo của URL.
  2. máy chủ - Đặt hoặc trả về tên máy chủ và cổng của URL.
  3. tên máy chủ - Đặt hoặc trả về tên máy chủ của URL.
  4. href -Sets hoặc trả lại toàn bộ URL.
  5. tên đường dẫn -Sets hoặc trả về tên đường dẫn của một URL.
  6. cổng - Đặt hoặc trả về số cổng mà máy chủ sử dụng cho một URL.
  7. giao thức - Đặt hoặc trả về giao thức của URL.
  8. tìm kiếm -Sets hoặc trả về phần truy vấn của URL

Bây giờ Nếu bạn muốn thay đổi một trang hoặc chuyển hướng người dùng sang một số trang khác, bạn có thể sử dụng thuộc hreftính của đối tượng Vị trí như thế này

Bạn có thể sử dụng thuộc tính href của đối tượng Location.

window.location.href = "http://www.stackoverflow.com";

Vị trí đối tượng cũng có ba phương thức này

  1. gán () - Tải một tài liệu mới.
  2. tải lại () - Tải lại tài liệu hiện tại.
  3. thay thế () - Thay thế tài liệu hiện tại bằng tài liệu mới

Bạn có thể sử dụng phương thức gán () và thay thế cũng để chuyển hướng đến các trang khác như thế này

location.assign("http://www.stackoverflow.com");

location.replace("http://www.stackoverflow.com");

Cách gán () và thay thế () khác nhau - Sự khác biệt giữa phương thức thay thế () và phương thức gán () () là thay thế () loại bỏ URL của tài liệu hiện tại khỏi lịch sử tài liệu, có nghĩa là không thể sử dụng nút "quay lại" để điều hướng trở lại tài liệu gốc. Vì vậy, Sử dụng phương thức gán () nếu bạn muốn tải một tài liệu mới và muốn cung cấp tùy chọn điều hướng trở lại tài liệu gốc.

Bạn có thể thay đổi thuộc tính object href bằng cách sử dụng jQuery cũng như thế này

$(location).attr('href',url);

Và do đó bạn có thể chuyển hướng người dùng đến một số url khác.


203

Về cơ bản jQuery chỉ là một khung JavaScript và để thực hiện một số điều như chuyển hướng trong trường hợp này, bạn chỉ có thể sử dụng JavaScript thuần túy, vì vậy trong trường hợp đó bạn có 3 tùy chọn sử dụng JavaScript vanilla:

1) Sử dụng vị trí thay thế , điều này sẽ thay thế cho lịch sử hiện tại của trang, có nghĩa là nó không phải là có thể sử dụng lại nút để trở về trang gốc.

window.location.replace("http://stackoverflow.com");

2) Sử dụng gán vị trí , điều này sẽ giữ lịch sử cho bạn và bằng cách sử dụng nút quay lại, bạn có thể quay lại trang gốc:

window.location.assign("http://stackoverflow.com");

3) Tôi khuyên bạn nên sử dụng một trong những cách trước đó, nhưng đây có thể là tùy chọn thứ ba sử dụng JavaScript thuần túy:

window.location.href="http://stackoverflow.com";

Bạn cũng có thể viết một hàm trong jQuery để xử lý nó, nhưng không được khuyến nghị vì đó chỉ là một hàm JavaScript thuần, bạn cũng có thể sử dụng tất cả các hàm trên mà không có cửa sổ nếu bạn đã ở trong phạm vi cửa sổ, ví dụ như window.location.replace("http://stackoverflow.com");có thểlocation.replace("http://stackoverflow.com");

Ngoài ra tôi hiển thị tất cả trên hình ảnh dưới đây:

location.replace location.assign


1
Tôi khuyên bạn nên sử dụng assign()qua href=quá vì sau đó đã không làm việc đúng cách đối với tôi trong một số trường hợp.
soái ca


169

Trước khi tôi bắt đầu, jQuery là một thư viện JavaScript được sử dụng để thao tác DOM. Vì vậy, bạn không nên sử dụng jQuery để chuyển hướng trang.

Một trích dẫn từ Jquery.com:

Mặc dù jQuery có thể chạy mà không gặp sự cố lớn trong các phiên bản trình duyệt cũ hơn, chúng tôi không chủ động kiểm tra jQuery trong đó và thường không sửa các lỗi có thể xuất hiện trong chúng.

Nó được tìm thấy ở đây: https://jquery.com/browser-support/

Vì vậy, jQuery không phải là một giải pháp cuối cùng và tất cả để tương thích ngược.

Giải pháp sau đây sử dụng JavaScript thô hoạt động trong tất cả các trình duyệt và đã được chuẩn trong một thời gian dài, do đó bạn không cần bất kỳ thư viện nào để hỗ trợ trình duyệt chéo.

Trang này sẽ chuyển hướng đến Google sau 3000 mili giây

<!DOCTYPE html>
<html>
    <head>
        <title>example</title>
    </head>
    <body>
        <p>You will be redirected to google shortly.</p>
        <script>
            setTimeout(function(){
                window.location.href="http://www.google.com"; // The URL that will be redirected too.
            }, 3000); // The bigger the number the longer the delay.
        </script>
    </body>
</html>

Các tùy chọn khác nhau như sau:

window.location.href="url"; // Simulates normal navigation to a new page
window.location.replace("url"); // Removes current URL from history and replaces it with a new URL
window.location.assign("url"); // Adds new URL to the history stack and redirects to the new URL

window.history.back(); // Simulates a back button click
window.history.go(-1); // Simulates a back button click
window.history.back(-1); // Simulates a back button click
window.navigate("page.html"); // Same as window.location="url"

Khi sử dụng thay thế, nút quay lại sẽ không quay lại trang chuyển hướng, như thể nó chưa từng có trong lịch sử. Nếu bạn muốn người dùng có thể quay lại trang chuyển hướng thì hãy sử dụng window.location.hrefhoặc window.location.assign. Nếu bạn sử dụng một tùy chọn cho phép người dùng quay lại trang chuyển hướng, hãy nhớ rằng khi bạn vào trang chuyển hướng, nó sẽ chuyển hướng bạn quay lại. Vì vậy, hãy cân nhắc điều đó khi chọn một tùy chọn cho chuyển hướng của bạn. Trong điều kiện trang chỉ chuyển hướng khi người dùng thực hiện một hành động thì việc có trang trong lịch sử nút quay lại sẽ ổn. Nhưng nếu trang tự động chuyển hướng thì bạn nên sử dụng thay thế để người dùng có thể sử dụng nút quay lại mà không bị buộc quay lại trang mà chuyển hướng gửi.

Bạn cũng có thể sử dụng dữ liệu meta để chạy chuyển hướng trang như sau.

Làm mới META

<meta http-equiv="refresh" content="0;url=http://evil.com/" />

Địa điểm META

<meta http-equiv="location" content="URL=http://evil.com" />

Cướp bóc

<base href="http://evil.com/" />

Nhiều phương pháp khác để chuyển hướng khách hàng không nghi ngờ của bạn đến một trang mà họ có thể không muốn đi có thể được tìm thấy trên trang này (không phải một trong số họ phụ thuộc vào jQuery):

https://code.google.com.vn/p/html5security/wiki/RedirectionMethods

Tôi cũng muốn chỉ ra rằng, mọi người không muốn được chuyển hướng ngẫu nhiên. Chỉ chuyển hướng mọi người khi thực sự cần thiết. Nếu bạn bắt đầu chuyển hướng mọi người một cách ngẫu nhiên, họ sẽ không bao giờ truy cập trang web của bạn nữa.

Đoạn tiếp theo là giả thuyết:

Bạn cũng có thể được báo cáo là một trang web độc hại. Nếu điều đó xảy ra thì khi mọi người nhấp vào liên kết đến trang web của bạn, trình duyệt của người dùng có thể cảnh báo họ rằng trang web của bạn là độc hại. Điều cũng có thể xảy ra là các công cụ tìm kiếm có thể bắt đầu giảm xếp hạng của bạn nếu mọi người báo cáo trải nghiệm xấu trên trang web của bạn.

Vui lòng xem lại Nguyên tắc quản trị trang web của Google về các chuyển hướng: https://support.google.com/webmastersals/2721217?hl=vi&ref_topic=6001971

Đây là một trang nhỏ thú vị đuổi bạn ra khỏi trang.

<!DOCTYPE html>
<html>
    <head>
        <title>Go Away</title>
    </head>
    <body>
        <h1>Go Away</h1>
        <script>
            setTimeout(function(){
                window.history.back();
            }, 3000);
        </script>
    </body>
</html>

Nếu bạn kết hợp hai ví dụ trang với nhau, bạn sẽ có một vòng lặp định tuyến lại sẽ đảm bảo rằng người dùng của bạn sẽ không bao giờ muốn sử dụng trang web của bạn nữa.


5
Tôi giải quyết yêu cầu của anh ấy cho jQuery bằng cách nói rằng nó không cần thiết. JQuery có rất nhiều phím tắt hữu ích tuyệt vời cho JavaScript nhưng không cần bất kỳ phím tắt nào cho chuyển hướng. JQuery chỉ là JavaScript. Chỉ có bấy nhiêu thôi. Cách thông thường để gọi chuyển hướng sẽ hoạt động với các hàm của anh ấy bằng jQuery.
Patrick W. McMahon


145

Bạn có thể làm điều đó mà không cần jQuery như:

window.location = "http://yourdomain.com";

Và nếu bạn chỉ muốn jQuery thì bạn có thể làm như sau:

$jq(window).attr("location","http://yourdomain.com");

JQuery được cho là một ý tưởng tốt hơn vì nó có thể trừu tượng hóa các thay đổi / phản đối của trình duyệt trong tương lai
Epirocks

@Epirocks Nếu có một API trong jQuery được thiết kế cho điều này, đó có thể là một lý do hợp lệ (mặc dù API này chắc chắn sẽ thay đổi), nhưng ví dụ ở đây chỉ là lạm dụng một tính năng của jQuery nơi bạn có thể bao bọc các đối tượng không phải DOM và một số phương pháp vẫn sẽ hoạt động.
1j01

Thực tế là "một số phương pháp vẫn sẽ hoạt động" chính xác là những gì tôi muốn nói bằng cách trừu tượng hóa. Có, bạn có thể làm điều đó mà không cần JQuery, nhưng bạn có thể làm bất cứ điều gì mà không cần đến JQuery.
Epirocks

144

Điều này hoạt động với jQuery:

$(window).attr("location", "http://google.fr");

Chỉ vì nó hoạt động, không có nghĩa là bạn nên làm điều đó. Đây là một sự gián tiếp vô nghĩa xung quanh việc thiết lậpwindow.location
1j01

89

# Chuyển hướng trang HTML bằng jQuery / JavaScript

Hãy thử mã ví dụ này:

function YourJavaScriptFunction()
{
    var i = $('#login').val();
    if (i == 'login')
        window.location = "login.php";
    else
        window.location = "Logout.php";
}

Nếu bạn muốn cung cấp một URL hoàn chỉnh như window.location = "www.google.co.in";.


"Sử dụng jQuery" là um, không chính xác. Và ví dụ về việc sử dụng một URL hoàn chỉnh sẽ không hoạt động, vì đó không phải là một URL hoàn chỉnh. Không có giao thức, vì vậy nó sẽ được hiểu là một URL tương đối.
1j01

80

Bạn cần đặt dòng này trong mã của bạn:

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

Nếu bạn không có jQuery, hãy sử dụng JavaScript:

window.location.replace("http://stackoverflow.com");
window.location.href("http://stackoverflow.com");

80

Câu hỏi gốc: "Cách chuyển hướng bằng jQuery?", Do đó câu trả lời thực hiện jQuery >> Trường hợp sử dụng miễn phí.


Để chỉ chuyển hướng đến một trang bằng JavaScript:

window.location.href = "/contact/";

Hoặc nếu bạn cần một sự chậm trễ:

setTimeout(function () {
  window.location.href = "/contact/";
}, 2000);   // Time in milliseconds

jQuery cho phép bạn chọn các thành phần từ một trang web một cách dễ dàng. Bạn có thể tìm thấy bất cứ điều gì bạn muốn trên một trang và sau đó sử dụng jQuery để thêm các hiệu ứng đặc biệt, phản ứng với các hành động của người dùng hoặc hiển thị và ẩn nội dung bên trong hoặc bên ngoài phần tử bạn đã chọn. Tất cả các nhiệm vụ này bắt đầu với việc biết cách chọn một yếu tố hoặc một sự kiện .

$('a,img').on('click',function(e){
  e.preventDefault();
  $(this).animate({
    opacity: 0 //Put some CSS animation here
  }, 500);
  setTimeout(function(){
    // OK, finished jQuery staff, let's go redirect
    window.location.href = "/contact/";
  },500);
});

Hãy tưởng tượng ai đó đã viết một tập lệnh / plugin với 10000 dòng mã. Với jQuery, bạn có thể kết nối với mã này chỉ bằng một hoặc hai dòng.


Tiêu đề Javascript: Thay vào đó có thể thực hiện thời gian tính bằng giây không?
PythonMaster202

79

Vì vậy, câu hỏi là làm thế nào để tạo một trang chuyển hướng, chứ không phải làm thế nào để chuyển hướng đến một trang web?

Bạn chỉ cần sử dụng JavaScript cho việc này. Đây là một số mã nhỏ sẽ tạo ra một trang chuyển hướng động.

<script>
    var url = window.location.search.split('url=')[1]; // Get the URL after ?url=
    if( url ) window.location.replace(url);
</script>

Vì vậy, giả sử bạn chỉ cần đặt đoạn mã này vào một redirect/index.htmltệp trên trang web của mình, bạn có thể sử dụng nó như vậy.

http://www.mywebsite.com/redirect?url=http://stackoverflow.com

Và nếu bạn đi đến liên kết đó, nó sẽ tự động chuyển hướng bạn đến stackoverflow.com .

Liên kết đến Tài liệu

Và đó là cách bạn tạo một trang chuyển hướng đơn giản với JavaScript

Biên tập:

Cũng có một điều cần lưu ý. Tôi đã thêm window.location.replacevào mã của mình vì tôi nghĩ rằng nó phù hợp với trang chuyển hướng, nhưng, bạn phải biết rằng khi sử dụng window.location.replacevà bạn được chuyển hướng, khi bạn nhấn nút quay lại trong trình duyệt, nó sẽ không quay lại trang chuyển hướng, và nó sẽ Quay trở lại trang trước nó, hãy xem điều demo nhỏ này.

Thí dụ:

Quá trình: lưu trữ nhà => chuyển hướng trang đến google => google

Khi ở google: google => nút quay lại trong trình duyệt => lưu trữ nhà

Vì vậy, nếu điều này phù hợp với nhu cầu của bạn thì mọi thứ sẽ ổn. Nếu bạn muốn bao gồm trang chuyển hướng trong lịch sử trình duyệt, hãy thay thế

if( url ) window.location.replace(url);

với

if( url ) window.location.href = url;

74

Trên chức năng nhấp của bạn, chỉ cần thêm:

window.location.href = "The URL where you want to redirect";
$('#id').click(function(){
    window.location.href = "http://www.google.com";
});


57

jQuery không cần thiết. Bạn có thể làm được việc này:

window.open("URL","_self","","")

Thật dễ dàng!

Cách tốt nhất để bắt đầu một yêu cầu HTTP là với document.loacation.href.replace('URL').


52

Đầu tiên viết đúng. Bạn muốn điều hướng trong một ứng dụng cho một liên kết khác từ ứng dụng của bạn cho một liên kết khác. Đây là mã:

window.location.href = "http://www.google.com";

Và nếu bạn muốn điều hướng các trang trong ứng dụng của mình thì tôi cũng có mã, nếu bạn muốn.


52

Bạn có thể chuyển hướng trong jQuery như thế này:

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

45

Trong JavaScript và jQuery, chúng ta có thể sử dụng đoạn mã sau để chuyển hướng một trang sang trang khác:

window.location.href="http://google.com";
window.location.replace("page1.html");

45

ECMAScript 6 + jQuery, 85 byte

$({jQueryCode:(url)=>location.replace(url)}).attr("jQueryCode")("http://example.com")

Xin đừng giết tôi, đây là một trò đùa. Đó là một trò đùa. Đây là một trò đùa.

Điều này đã "cung cấp một câu trả lời cho câu hỏi", theo nghĩa là nó đã yêu cầu một giải pháp "sử dụng jQuery", trong trường hợp này đòi hỏi phải buộc nó vào phương trình bằng cách nào đó.

Ferrybig rõ ràng cần trò đùa được giải thích (vẫn nói đùa, tôi chắc chắn có các tùy chọn hạn chế trong mẫu đánh giá), vì vậy không cần phải quảng cáo thêm:

Các câu trả lời khác đang sử dụng jQuery attr()trên locationhoặc windowcác đối tượng không cần thiết.

Câu trả lời này cũng lạm dụng nó, nhưng theo một cách vô lý hơn. Thay vì sử dụng nó để đặt vị trí, điều này sử dụngattr() để lấy một hàm đặt vị trí.

Hàm được đặt tên jQueryCodemặc dù không có gì về jQuery và việc gọi hàm somethingCodelà khủng khiếp, đặc biệt là khi thứ đó thậm chí không phải là ngôn ngữ.

"85 byte" là một tham chiếu đến Code Golf. Chơi golf rõ ràng không phải là điều bạn nên làm ngoài môn đánh gôn, và hơn nữa câu trả lời này rõ ràng là không thực sự chơi gôn.

Về cơ bản, co rúm.


45

Javascript:

window.location.href='www.your_url.com';
window.top.location.href='www.your_url.com';
window.location.replace('www.your_url.com');

Câu hỏi:

var url='www.your_url.com';
$(location).attr('href',url);
$(location).prop('href',url);//instead of location you can use window

1
Có một lý do để lưu trữ url trong jQuery dưới dạng một biến, nhưng không phải với Vanilla?
ESR

43

Sử dụng JavaScript:

Cách 1:

window.location.href="http://google.com";

Cách 2:

window.location.replace("http://google.com");

Sử dụng jQuery:

Phương pháp 1: $ (vị trí)

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

Phương pháp 2: Chức năng tái sử dụng

jQuery.fn.redirectTo = function(url){
    window.location.href = url;
}

jQuery(window).redirectTo("http://google.com");

41

Đây là một chuyển hướng trì hoãn thời gian. Bạn có thể đặt thời gian trễ thành bất cứ điều gì bạn muốn:

<!doctype html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Your Document Title</title>
    <script type="text/javascript">
        function delayer(delay) {
            onLoad = setTimeout('window.location.href = "http://www.google.com/"', delay);
        }
    </script>
</head>

<body>
    <script>
        delayer(8000)
    </script>
    <div>You will be redirected in 8 seconds!</div>
</body>

</html>

5
làm tốt hơn việc này: setTimeout (function () {window.location.href = " google.com "}, delay);
dikkini

39

Có ba cách chính để làm điều này,

window.location.href='blaah.com';
window.location.assign('blaah.com');

và ...

window.location.replace('blaah.com');

Cách cuối cùng là tốt nhất, đối với chuyển hướng truyền thống, vì nó sẽ không lưu trang bạn đã truy cập trước khi được chuyển hướng trong lịch sử tìm kiếm của bạn. Tuy nhiên, nếu bạn chỉ muốn mở một tab bằng JavaScript, bạn có thể sử dụng bất kỳ cách nào ở trên. 1

EDIT: windowTiền tố là tùy chọn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.