Как заставить 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% в совместимости браузера.