我遇到了一个只有Chrome+Firefox的奇怪问题。它不会在IOS或IE9上重新编程。
这是复印件:
- 加载主页
http://example.com
- 登录(通过rel="外部"超链接)。在我的例子中,我使用Facebook的Oauth服务器端流,所以这个URL是一个Facebook.com
- Facebook接受用户的凭据,然后重定向到
http://example.com/user/callback
。这里处理各种facebook数据(在查询字符串中提供) - 在
http://example.com/user/callback
处的服务器端代码然后将用户重定向到http://example.com
。用于重定向的机制是来自ASP.NET MVC3的RedirectToAction
。这将返回一个302
预期结果:用户会在浏览器中看到一个URL=http://example.com
,并且内容都显示得很好。这适用于IE和Safari。
操作结果(仅适用于Chrome)用户在浏览器中获得URL=http://example.com/#base_domain=example.com
实际页面为空白(没有可见内容)但是,视图源显示内容是存在的。
操作结果(仅在Firefox上)用户在浏览器中获得URL=http://example.com/#_=_
实际页面为空白(没有可见内容)但是,视图源显示内容是存在的。
其他信息如果我在IE中输入URL http://example.com/#base_domain=example.com
,我会得到相同的"隐藏"内容(即仍然存在HTML源的空白页面)。
我还应该注意,我在应用程序的其他部分使用了RedirectToAction/302重定向技术,没有任何问题。
AJAX导航关闭后,问题也得到了解决
编辑:这也适用于Safari(OSX+Windows),没有任何问题。它显然只在Windows和PC上的Chrome+Firefox上坏了。
IOS/Safari:正常Win/Safari:可以Win/IE:好Windows Phone模拟器:OK
Win/FFirefox:borkedWin/Chrome:borked
OSX/Safari:可以OSX/Firefox:中止OSX/Chrome:borked
不确定安卓系统。
最好的解决方案似乎是将Push State和Hash Listening设置为false,因此chrome/ff完全忽略它们。我已经禁用了AJAX导航(有一些有趣的行为,我还没有完全解释我的服务器端代码)。
$.mobile.pushStateEnabled = false;
$.mobile.hashListeningEnabled = false;
我可能会等到1.1版本并稳定我的其余代码,然后再尝试使用AJAX导航。