我有一个搜索系统,主页位于:
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的方式中使用更精明的人的帮助。
答案 0 :(得分:1)
尝试将第431行更改为此
return (path != null) && path !== "" && (({}.toString.call(path) === "[object RegExp]" && !path.test(currentPath)) || ({}.toString.call(path) === "[object String]" && path !== currentPath));
默认情况下,该行会删除“?”对于currentPath和path。因此,当path = "/?q=roe+v+wade"
和currentPath = "/"
被删除q=roe+v+wade
时,路径和currentPath相等,因此不会启动重定向。
编辑:发现我的初步答案存在问题。将第292行更新为
current_path = [document.location.pathname, document.location.search, document.location.hash].join("");
current_path变量(被送入isRedirect函数)最初只获取路径名和哈希值。 document.location.search的添加也告诉它也要抓住get vars - 我必须说,我并不是100%确定浏览器的兼容性。