Расшифровать URL-адрес на мобильном устройстве с «% 7 C» на «|» - PullRequest
0 голосов
/ 16 апреля 2020

Мы используем приведенный ниже код, чтобы иметь возможность ссылаться на указанную вкладку c на нашем веб-сайте.

Поскольку она в настоящее время сделана, она позволяет нам перейти на указанную вкладку c с помощью добавление # member-tabs | 3 к URL-адресу, где member-tabs - это класс, 3 - вкладка, которую нужно открыть, и они разделены знаком «|».

Проблема : Символ "|" кодируется как "% 7 C", но не может быть декодирован на телефоне / планшете. Я попытался добавить replace('%7C', '|'), но это не решило проблему.

Пример: https://test.radacutlery.com/fundraising/tabs/#member -tabs | 3

<script>

    function _setTab(){
        // get current hash value
        var curHash = window.location.hash.substr(1);
        // only continue if hash provided and scoped to member tabs
         if( !curHash || !curHash.match('member-tabs') ){ return false; }
        // split and int val tab num
        curHash = parseInt(curHash.replace('%7C', '|')split('|')[1]);

        // testing the decodeURI
        decodeURI(curHash)

        // ignore if tab is current state
        if( curHash === window._tabSelected ){ return false; }
        // set current tab to window
        window._tabSelected = curHash;

        // add click event to tab selected
        switch(curHash){
            case 0:
            case 1:
            case 2:
            case 3:
            case 4:
                jQuery('#member-tabs .et_pb_tab_'+curHash+' a').click();
            break;

            default:
                return false;
            break;
        }

        // scroll to tabs container
        _scrollToTabs();
    }

    // scroll to member tabs container with 50px offset
    function _scrollToTabs(){
        var oTabs = jQuery('#member-tabs');
        if( oTabs.length > 0 ){
            jQuery('html,body').animate({
                scrollTop: (oTabs.offset().top - 50)
            }, 1000);
        }
        return false;
    }

    // set falsey state for tab selected on load
    window._tabSelected = false;

    // attach to window load because the tabs are initialized later in document
    jQuery(window).on('load', function(){
        // check for initial hash state
        _setTab();

        // add hash change window listener
        jQuery(window).on('hashchange', function(){
            _setTab()
        });

    });
</script>

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Не уверен, что это проблема, но я вижу синтаксическую ошибку в этой строке:

// split and int val tab num
curHash = parseInt(curHash.replace('%7C', '|')split('|')[1]);

Должен иметь точку до split примерно так:

// split and int val tab num
curHash = parseInt(curHash.replace('%7C', '|').split('|')[1]);
0 голосов
/ 16 апреля 2020

Функция javascript, которую вы хотите: decodeURIComponent:

let encodedString ="1%7C2%7C3"
let decodedString = decodeURIComponent(encodedString)  // "1|2|3"
let parts = decodedString.split("|") // ["1","2","3"]
let numbers = parts.map(part => parseInt(part)) // [1,2,3]

console.log({decodedString, parts, numbers})
...