如何阻止jQuery Mobile使用window.location做任何事情?

时间:2012-07-12 14:04:29

标签: javascript url jquery-mobile

基本上,我想在我自己的代码中处理哈希监听和所有内容,但是我无法让jQM停止监听哈希更改事件并且通常无法使用URL。我已经尝试了他们文档中的代码:

$(document).bind('mobileinit', function() {
    $.extend($.mobile, {
        hashListeningEnabled: false,
        pushStateEnabled: false,
        ajaxEnabled: false,
        linkBindingEnabled: false
    });
});

在第一页加载时,mobileinit事件不会被触发(即使看起来应该如此),所以这对我不起作用。让代码执行的是将它放在$(window).bind('load')中,我可以通过$.mobile.hashListeningEnabled === false在Firebug控制台中验证值是否正确设置在那里 - 但是,它们是好像什么也没做!当我在地址栏中输入<mysite>/index.html时,它会加载我的默认页面,但是如果我输入<mysite>/index.html#anything它只显示jQM加载微调器并且从不加载任何内容(我认为是因为它正在寻找一个文件中包含data-role=anything的页面,这是其默认功能)。此外,pushStateEnabled覆盖显然也无效,因为如果我运行window.location.hash = /somethingelse.html,则任何支持的浏览器中的网址栏都会显示http://<mysite>/somethingelse.html,而不是预期的http://<mysite>/index.html#somethingelse.html。< / p>

基本上,我想要的是jQuery Mobile处理页面布局和DOM操作,绝对没有别的。这可能吗?

1 个答案:

答案 0 :(得分:4)

我不知道这些是否是要设置的正确属性(没有检查文档)但我之前遇到过这个问题。要解决此问题,您需要在包含脚本之前绑定事件,以便:

<script type="text/javascript">
    $(document).bind('mobileinit', function() {
        $.extend($.mobile, {
            hashListeningEnabled: false,
            pushStateEnabled: false,
            ajaxEnabled: false,
            linkBindingEnabled: false
        });
    });
</script>
<script src="//code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>

您必须执行此操作的原因是加载jquery移动文件时会触发mobileinit事件。