簡體   English   中英

基於瀏覽器語言的 JS 重定向 if ... else' 語句無限循環

[英]JS Redirect based on browser language if ... else' statement loops infinitely

我已經編寫了一小段代碼來根據瀏覽器語言進行重定向,但是如果我使用原始 URL,代碼的“else”部分將無限循環。

我已經測試過它,如果我重定向到不同的 URL,它就像一個魅力,所以我假設它與嘗試將它重定向回原始 URL 有關,但不知道如何阻止它。 Break/Continue 和 console.log 有效,但前兩個是非法的,顯然我不能離開 console.log :如果第一個條件為假,SI 需要告訴 if/else 語句基本上停止或“停留在頁面上” .

有人能告訴我如何解決這個問題,以便如果瀏覽器語言設置為法語,重定向 ELSE 會留在原始 URL 上嗎?

<!-- language redirect -->
    <script>
        userLang = navigator.language || navigator.userLanguage;

    if (userLang == "fr") {
        window.location.href = "http://www.website.com/fr";

    }
    else {
        console.log('null'); *** THIS WORKS but is not right

window.location.href = "http://www.website.com"; *** THIS DOESN'T WORK gets stuck in a loading loop infinitely

window.location.href="http://www.someotherwebsite.com"; ***THIS WORKS but doesn't achieve my purpose
}
</script>

如果瀏覽器語言是法語,則重定向到法語網站(子目錄)ELSE 什么都不做,停留在英語網站上。

由於此腳本只會在英文頁面中實現,因此您無需為 else 語句傳遞任何內容。

userLang = navigator.language || navigator.userLanguage;

if (userLang == "fr") {
    window.location.href = "http://www.website.com/fr";
}

對於法語頁面,您只需將“fr”更改為“en”。

當您將 url 分配給window.location.href屬性時,即使將指定的 url 設置為您當前所在的 url,也會加載該 url。 如果語言不是法語,這會導致您的瀏覽器不斷重新加載您的網站。

來自MDN

每當為 location 對象分配新值時,將使用 URL 加載文檔,就像使用修改后的 URL 調用 location.assign() 一樣。 請注意,安全設置(如 CORS)可能會阻止這種情況有效發生。

為了解決您的問題,當您已經在用戶語言的正確頁面上時,您不應設置window.location.href屬性。

這只是一個邏輯問題。 如果它已經在那里,為什么要重定向到一個 url? 只需額外檢查一下,它是否已經在正確的 url 中,如下所示

<script>
        userLang = navigator.language || navigator.userLanguage;

    if (userLang == "fr" && window.location.href!= "http://www.website.com/fr") {

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

    }
    else {

       if(window.location.href != "http://www.website.com") {
             window.location.href = "http://www.website.com";
       }

    }

</script>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM