Резервные копии хэша History.js в Internet Explorer и проблема pushState

Я реализую веб-сайт, который динамически устанавливает свои URL-адреса с помощью History.js, когда новые разделы загружаются на главную страницу через ajax.

Кажется, это работает хорошо, но есть проблема с разделом хэша в URL-адресе, который History.js создает в качестве запасного варианта в Internet Explorer.

Вот примеры ссылок на странице, созданные с помощью jquery:

    function connect_browse_buttons(){
    $('.browselink').each(function(){
        $(this).click(function(){
            var action = $(this).attr('name');
            action = action.substring( ('action_browse').length );
            browsetype = action;
            if (isIE){
                // remove data object and title to avoid use of SUIDs by History.js in IE
                History.pushState(null, null, '/public/' + action);
            } else {
                History.pushState({oldurl: History.getState()['url']}, "Example " + action, config.wwwroot + "public/" + action);
            }
            return false;
        });
    });
}

Файл.htaccess перенаправляет любые URL-адреса, такие какhttp://example.com/public/category_aдоhttp://example.com,где javascript анализирует URL-адрес и загружает соответствующий раздел через запросы ajax в обработчике changeState.

JavaScript проверяет URL-адреса, такие как

http://example.com/public/category_a 

И для эквивалентных резервных URL-адресов, созданных в Internet Explorer, например

http://example.com/#public/category_a

Все работает нормально -Итак:

В Firefox , если я открою сайт в корне сайта,http://example.com, и щелкните ссылку, как указано выше, содержимое загружается (в обработчик changeState ), а URL-адрес устанавливается History.pushState как:

http://example.com/public/category_a

Если я затем нажму на другую ссылку, URL-адрес будет установлен, например,:

http://example.com/public/category_b

В IE , если я открою сайт в корне сайта и нажму на ссылку, как указано выше, контент загрузится, а URL-адрес будет установлен с хэшем как:

http://example.com/#public/category_a

Если я затем нажму на следующую ссылку, URL-адрес будет установлен как:

http://example.com/#public/category_b

Проблема возникает , когда я открываю в IE страницу, которая была добавлена ​​в закладки в Firefox и не имеет хеша в URL-адресе. Возьмем наш обычный пример:

http://example.com/public/category_a

Если я открою этот URL-адрес непосредственно в IE, через закладку или вставив URL-адрес в адресную строку браузера,.htaccess успешно перенаправляется, URL-адрес анализируется файлом js и загружается содержимое. Однако теперь, если я нажму на ссылку категории _b, URL-адрес будет установлен History.pushState на:

http://example.com/public/category_a#./category_b

Что я действительно хотел, так это установить URL как:

http://example.com/#public/category_b

Однако History.js, кажется, берет весь предыдущий URL-адрес в качестве базового URL-адреса для последующих pushStates. Я попытался установить абсолютные URL-адреса в History.pushState, но безуспешно. Как вы можете видеть в приведенном выше блоке кода, у меня есть специальный оператор pushState для IE -. Я пытался настроить это разными способами. Как я могу заставить историю pushState распознавать:

http://example.com 

в качестве базовой части URL-адреса, к которому должен быть добавлен хеш-раздел? Или есть лучший способ приблизиться к этому, чем тот, который я описал выше?

7
задан Cœur 31 December 2016 в 07:14
поделиться