2015-09-17 148 views
1

请有人更详细地解释什么时候在jQuery Mobile中启用/禁用$.mobile.hashListeningEnabled的功能?hashListeningEnabled - 它究竟做了什么?

我已经尝试调试源代码,但有一些代码我不完全理解。和文档是有点抽象(https://api.jquerymobile.com/global-config/):

jQuery Mobile的自动侦听和处理更改的location.hash。禁用此功能将阻止jQuery Mobile处理哈希更改,这允许您自己处理它们或在文档中使用滚动到特定标识的简单深度链接。

我之所以问这个问题,是因为我在iOS 9上遇到了问题,其中包含<select data-native-menu="false">元素。如果这个列表太长,jQuery Mobile会创建一个全屏对话框。

但它显示后直接关闭。我一直在环顾四周,发现其他人也有同样的问题:JQuery .popup("open") not working properly on iOS 9 device。建议

一个答案似乎为我工作确定 - 这是设置hashListeningEnabled为false:

$(document).on('mobileinit', function() { 
    $.mobile.hashListeningEnabled = false; 
}); 

但我不舒服,直到我明白究竟它将此功能推广到生产。

$.mobile.changePage似乎仍然有效。

回答

2

您可以在一个html文件中有多个页面。即使该页面实际上是另一个包含data-role =“page”的div,也可以转到“另一个页面”。 http://demos.jquerymobile.com/1.4.5/pages-multi-page/

所以,如果你使用这种类型的导航,你是拧。 苹果猜测有人可以使用散列进行XSS攻击。 /页的多页/ #two

弹出窗口使用哈希也:/页的多页/ #& UI状态=对话框

+0

这是真棒 - 感谢!不知道你可以用哈希做XSS吗? – keldar

+2

我不确定Apple是否有意改变哈希行为来防止XSS。问题是window.location.hash值在iOS 9.0 UIWebView中异步设置,这看起来更像是一个bug(请参阅:https://openradar.appspot.com/22186109),因为在WkWebView中并非如此iOS 9.0 – DaveAlden

+0

感谢您的澄清。我希望他们尽快解决这个可怕的错误! –