如何防止内部链接页面上的默认行为?
我的目标是防止用户在未经身份验证的情况下访问页面内容。
最近我也面临同样的情况。我使用 jQuery Mobile 和jQuery Templates,所有敏感数据都来自 Web 服务。
pagebeforeshow
我的解决方案是为用户需要授权的任何页面注册事件回调。在这个回调函数中,我检查了用户是否被授权,在我的例子中,这是一个 JSONP Web 服务调用,它要么返回数据,要么返回一个适当的错误代码。
然后,如果用户被授权,则使用 jQuery 模板呈现数据;否则我将用户重定向到登录页面,使用$.mobile.changePage()
.
在 beta3 中,您可以使用“动态注入页面”技术,如下所述:
用户身份验证是服务器端的事情,不能在 javascript 中实现!
那么是什么阻止我自己发送 GET 请求呢?
如果用户未通过身份验证,则无需登录就无法访问的页面应重定向到登录页面。如果您直接从 javascript 使用 Web 服务,那么如果用户未通过身份验证,它们应该返回错误。
在 javascript 中阻止对页面的访问是荒谬的。[但我不得不承认我以前在商业产品中见过它......]
编辑
好吧,回答这个问题...
这取决于行为如何附加到页面。如果您使用live
withpageshow
或pagecreate
for 这些行为 - 那么您可以使用pagebefore*
事件和return false
另一个编辑
我似乎更好地理解了这个问题。你有网络服务,我会假设它们是安全的,你不想发出请求并得到“错误 - 没有经过验证”的响应 - 没有必要这样做。并且您在一个 html 文档中使用多个页面。
有了这些假设,我说你需要写一个小包装$.mobile.changePage()
- 像这样:
$.mobile.changePageIf(condition,what,how,bool1,bool2){
if(condition){
$.mobile.changePage(what,how,bool1,bool2);
}else{
//display "log in, dude!" or whatever
}
}
并在任何地方使用包装器而不是原始函数,如果您知道用户已登录,则放置一个返回 true 的条件。