Как заставить Bootstrap Tour применять параметры GET

У меня есть поисковая система, где домашняя страница находится по адресу:

http://example.com/ 

И страница результатов (которые совершенно разные) находятся по адресу:

http://example.com/?q=foo

Я пытаюсь настроить загрузочный тур так, чтобы он начинался на домашней странице, а затем переносил пользователя на страницу результатов. Так что у меня есть такие шаги:

        {
            path: '/',
            element: "#extra-sidebar-fields",
            backdrop: true,
            title: "Sophisticated Search",
            content: "In the Advanced Search area, you can make sophisticated searches against many fields. " +
                "Press \"Next\" and we'll make a query for you.",
        },
        {
            path: '/?q=roe+v+wade',
            element: 'article:first',
            title: 'Detailed Results',
            content: 'Here you can see the results for the query "Roe v Wade" sorted by relevance.'
        }

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

Если бы у меня были результаты поиска по другому пути, это работало бы замечательно, но так как домашняя страница и результаты находятся на /Похоже, я застрял.

Правки...

Работая под открытым небом, я попробовал несколько вещей с тех пор, как опубликовал это. Во-первых, я подумал, что смогу выполнить перенаправление, используя параметр onNext, поэтому я изменил свой первый шаг, чтобы иметь:

     {
        path: '/',
        element: "#extra-sidebar-fields",
        backdrop: true,
        title: "Sophisticated Search",
        content: "In the Advanced Search area, you can make sophisticated searches against many fields. " +
            "Press \"Next\" and we'll make a query for you.",
        onNext: function(){
            window.location = '/?q=row+v+wade'
        },
    },
    {
        path: '/?q=roe+v+wade',
        element: 'article:first',
        title: 'Detailed Results',
        content: 'Here you can see the results for the query "Roe v Wade" sorted by relevance.'
    }

Это не сработало, потому что, хотя перенаправление происходило правильно (хорошо!), До того, как это произошло, пользователь мог увидеть следующий шаг, и в зависимости от скорости соединения он мог быть виден некоторое время, прежде чем перенаправление завершилось. Так что эта стратегия не годится, если я не смогу предотвратить появление следующего шага.


Я попробовал другую стратегию, переопределив метод _isRedirect:

tour._isRedirect = function(path, currentPath){
    return (path != null) && //Return false if path is undefined.
        path !== "" && (
        ({}.toString.call(path) === "[object RegExp]" && !path.test(currentPath)) ||
            ({}.toString.call(path) === "[object String]" &&
                path.replace(/\/?$/, "") !== currentPath.replace(/\/?$/, "")
                )
        );
}

Обычно там есть строка, которая удаляет параметры GET (path.replace(/\?.*$/, "")), поэтому я изменил это, чтобы не делать этого. Это изменение также отчасти сработало. Перенаправление происходило правильно, не показывая следующий шаг, но, к сожалению, это изменение сделало цикл перенаправления... или что-то в этом роде. Он просто продолжал перенаправлять снова и снова.


Не уверен, что я буду делать дальше. Могли бы воспользоваться помощью кого-то более опытного в способах JS.

1 ответ

Попробуйте изменить номер строки 431 на этот

   return (path != null) && path !== "" && (({}.toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || ({}.toString.call(path) === "[object String]" && path !== currentPath));

По умолчанию эта строка удаляет "?" для текущего пути и пути. Так когда path = "/?q=roe+v+wade" а также currentPath = "/" q=roe+v+wade удаляется, поэтому path и currentPath равны, поэтому перенаправление не инициируется.

Изменить: обнаружил проблему с моим первоначальным ответом. Обновить строку 292 до

    current_path = [document.location.pathname, document.location.search, document.location.hash].join("");

Переменная current_path (которая передается в функцию isRedirect) изначально получает только путь и хэш. Добавление document.location.search говорит также и о том, чтобы получить переменные get - хотя я должен сказать, что я не уверен на 100% в совместимости браузера.

Другие вопросы по тегам