如何阻止jQuery Mobile在window.location上进行任何操作?

3

基本上,我想在自己的代码中处理哈希监听和所有相关内容,但是我无法让jQM停止监听哈希变化事件并干扰URL。我尝试了他们文档中的代码:

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

移动初始化事件在第一次页面加载时不会被触发(即使看起来应该触发),所以这对我来说行不通。可以让代码执行的是将其放在$(window).bind('load')中,在Firebug控制台中通过$.mobile.hashListeningEnabled === false验证值已经正确设置,但它们似乎没有起到任何作用!当我输入例如/index.html时,它会加载我的默认页面,但如果我输入/index.html#anything,它只显示了jQM加载旋转图标并且从未加载任何内容(我猜测是因为它正在寻找文件内含有data-role=anything的页面,这是其默认功能)。另外,pushStateEnabled重写显然也无法工作,因为如果我运行window.location.hash = /somethingelse.html,任何支持的浏览器中的URL栏都会显示http:///somethingelse.html,而不是预期的http:///index.html#somethingelse.html。

基本上,我想要jQuery Mobile处理页面布局和DOM操作,绝对不需要其他任何东西。这可能吗?

1个回答

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事件将触发。

谢谢,解决了!原来文档里确实有写,我可能当时没仔细看。 - jcsmnt0
不用谢,第一次尝试时我也花了一些时间才弄明白。 - John Kalberer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接