jquery - "Pages in a navbar initialize repeatedly"或 "Pages reinitialize on every navigation in a TabBar based App in Jquery Mobile"- Chrome

标签 jquery html jquery-mobile

我有以下标记(在第一个选项卡中)-

    <div data-role="navbar" class="myClass">
    <ul>
    <li><a rel="external" data-ajax="false" href="Tab1.html"  data-transition="slidefade" class="ui-btn-active ui-state-persist" id="favorite" data-icon="custom">Tab1</a></li>
    <li><a rel="external" data-ajax="false" href="Tab2.html" data-transition="slidefade" id="recent" data-icon="custom">Tab2</a></li> 
    <li><a rel="external" data-ajax="false" href="Tab3.html" data-transition="slidefade" id="contacts" data-icon="custom">Tab3</a></li>
    <li><a rel="external" data-ajax="false" href="Tab4.html"  data-transition="slidefade" id="keypad" data-icon="custom">Tab4</a></li>
     </ul>
</div>

当我通过点击导航栏在页面之间切换时(通过CSS使其看起来像iOS native UITabBar),每当我导航到选项卡时,都会初始化相应的.html文件(我希望页面仅在应用程序生命周期)。

当我删除属性 rel="external"data-ajax="false" 时,问题得到解决,但仅在 Safari 浏览器中,Chrome 停止导航到该页面并给出错误 - “Error加载页面”。 - <----这是 Chrome 浏览器的已知行为吗?

此外,如果我声明一个类似 window.variable=xyz; 的对象,那么一旦我离开页面,存储在 window.variable 中的值就会丢失即每次点击导航栏后应用程序都会重新初始化,并且我无法在整个应用程序中共享 window 对象。

而且,如果我给-

<script>
            $(document).bind("mobileinit", function(){
            alert('Page inited');                     
});
 </script>

在 Tab1.html、Tab2.html、Tab3.html 和 Tab4.html 的 header 中,每当我导航到相应的选项卡页面时,都会调用脚本(即标记中的整个 header ),但我不希望发生这种情况。

这是 Google Chrome 浏览器中的已知问题/功能吗?同样基于 Webkit 构建的 Safari 的行为有所不同。

最佳答案

绝对删除 rel="external"data-ajax="false" 属性,它们会阻止页面兑现。

然后您需要像这样打开兑现:

$(document).one("mobileinit", function () {
    $.mobile.page.prototype.options.domCache = true;
});

如果您希望每个页面都兑现,则使用此选项。如果您只想兑现某些页面,请使用以下类比:

<div data-role="page" id="cacheMe" data-dom-cache="true">

您还可以像这样以编程方式缓存页面:

pageContainerElement.page({ domCache: true });

如果您在多个 html-s 中有多个页面,您将需要使用 data-prefetch 属性,如下所示:

<a href="prefetchThisPage.html" data-prefetch> ... </a>

在这里你可以找到我关于这种兑现的另一个答案:https://stackoverflow.com/a/14019929/1848600

现在介绍一下持久对象。如果您遵循了顶级说明,您可以简单地创建一个持久对象,如下所示:

var someObject = { 选项1 : '', 选项2:0, 选项3:''//等等.. }

rel="external"data-ajax="false" 将阻止 jQM 情况下的对象持久化,这些属性的作用类似于页面刷新。

关于jquery - "Pages in a navbar initialize repeatedly"或 "Pages reinitialize on every navigation in a TabBar based App in Jquery Mobile"- Chrome,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037752/

相关文章:

jquery - 通过 javascript 代码以编程方式添加按钮后,在按钮上应用 JQuery 移动样式

css - 从 JQM 可折叠标题中删除 data-iconshadow ="false"

javascript - 在 jQuery 中调用 Javascript 函数

javascript - jQuery 中选择器和条件的问题

javascript - Ajax 影响 ajax 表单上的 jQuery 文档加载

html - 如何将 div 与我的导航栏对齐?

javascript - 在不丢失选择的情况下使用 JavaScript 更改选择中的选项

javascript - 视频不会在 Chrome 中自动播放

php - 使用 Facebook 图形 API,是否可以从位置对象获取经度和纬度?

javascript - jquery mobile多页下拉列表不显示所选值