仅在第一次或刷新时加载Javascript

凯文

我正在使用Cordova和jQuery Mobile 1.4.5构建一个跨平台的应用程序,我有一个简单的html页面可以加载javascript文件。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">

        <!-- Include jQUERY --->
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="jquery/jquery.mobile-1.4.5.css">
        <link rel="stylesheet" href="css/custom-icons.css">
        <script src="jquery/jquery.js"></script>
        <script src="jquery/jquery.mobile-1.4.5.js"></script>

        <title>myPage</title>
    </head>
    <body>
        <!-- jQUERY HEADER is a navigation bar with multiple options -->
        <div data-role="header">
            <a href="index.html" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
            <h1>my app</h1>
            <div data-role="navbar">
                <ul id="nav-bar">
                    <li><a href="a.html" data-page="a">a</a></li>
                    <li><a href="b.html" data-page="b">b</a></li>
                    <li><a href="c.html" data-page="c">c</a></li>
                </ul>
            </div>
        </div>

       <div role="main" class="ui-content">
           <center><h3><i>A title</i></h3>

           <fieldset data-role="controlgroup" data-type="horizontal" data-mini="true">
                <legend>my legend</legend>
                <input type="checkbox" data-role="flipswitch" name="flip1" id="flip1">
                <input type="checkbox" data-role="flipswitch" name="flip2" id="flip2">
                <input type="checkbox" data-role="flipswitch" name="flip3" id="flip3">
                <input type="checkbox" data-role="flipswitch" name="flip4" id="flip4">
           </fieldset>
           </center>
       </div>

        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/home.js"></script>
    </body>
</html>

但是,该home.js文件仅在第一次(或刷新时)加载,但是如果例如b.html我在浏览并且导航到以上页面(index.html),则home.js不会执行该文件。

主页home.js文件仅包含console.log("executed");,当cordova加载index.html文件时会打印该文件,但稍后我通过导航栏手动导航至该页面时不会显示

编辑:请注意其他页面不会显示此行为。例如,以下页面始终加载javascript文件。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
        <meta name="format-detection" content="telephone=no">
        <meta name="msapplication-tap-highlight" content="no">
        <!-- <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
        <link rel="stylesheet" type="text/css" href="css/index.css"> -->

        <!-- Include jQUERY --->
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="jquery/jquery.mobile-1.4.5.css">
        <link rel="stylesheet" href="css/custom-icons.css">
        <script src="jquery/jquery.js"></script>
        <script src="jquery/jquery.mobile-1.4.5.js"></script>

        <title>bla bla</title>
    </head>
    <body>
        <!-- jQUERY HEADER is a navigation bar with multiple options -->
        <div data-role="header">
            <a href="index.html" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
            <h1>smartHub</h1>
            <div data-role="navbar">
                <ul id="nav-bar">
                    <li><a href="a.html" data-page="a">a</a></li>
                    <li><a href="b.html" data-page="b">b</a></li>
                    <li><a href="c.html" data-page="c">c</a></li>
                </ul>
            </div>
        </div>

        <div data-role="collapsible" data-collapsed-icon="carat-d" data-expanded-icon="carat-u">
          <h1>...</h1>
            <ul data-role="listview" data-inset="false">
                ...
            </ul>
        </div>

        <div data-role="collapsible" data-collapsed-icon="carat-d" data-expanded-icon="carat-u">
          <h1>...</h1>
            <ul data-role="listview" data-inset="false">
                ...
            </ul>
        </div>

        <script type="text/javascript" src="js/someOtherFile.js"></script>
    </body>
</html>

编辑:我通过更改标题的首页链接到此位置来“解决”了问题<a href="#" id="homeButton" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>,然后为首页按钮设置了一个单击处理程序,如下所示:

$("#homeButton").on("click", function() {
    window.location.replace("index.html"); 
});

这样做等同于真正浏览页面。但是,我认为这不是一个合适的解决方案。如果有人可以指出为什么我的主页表现出这种行为,那就太好了。

此外,这实际上根本不是解决方案,因为localStorage当重定向到index.html...,我放入的物品似乎丢失了

编辑:我重现了尽可能简单的问题。复制品包含两个html文件,可以在此处找到浏览到index.html它的打印品时On index.html,我们可以使用导航栏转到要a.html打印的内容On page a.html如果然后通过单击“主页”按钮再次转到索引,它将不再打印On index.html(因此脚本不会执行),而如果a.html再次导航到该索引,它将进行打印On page a.html(因此,每次导航到该脚本时都会执行该脚本)该页面,而索引页上的脚本则没有)。

罗纳德·PK

使用jQuery Mobile时,它index.html成为应用程序中所有页面的容器。因此,当用户导航到时a.html,其内容将注入到已为创建的DOM中index.html脚本index.html仍处于活动状态。index.html内容保留在DOM中但被隐藏。当用户导航回时index.html,的内容index.html将再次变得可见。的内容a.html已从DOM中删除。

然后,当用户再次导航到a.html时,其内容将再次注入DOM中,并再次执行其中的任何脚本。

进入这些页面并观看控制台。

index.html:

<!DOCTYPE html>
<html>
    <head>  
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- Include jQUERY -->
        <link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
        <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
        <script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

        <title>Index page</title>
    </head>
    <body>
        <div data-role="page" id="index">
            <div data-role="header">
                <a href="#" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
                <h1>My app title</h1>
                <div data-role="navbar">
                    <ul id="nav-bar">
                        <li><a href="a.html" data-page="a">a</a></li>
                        <li><a href="#" data-page="b">b</a></li>
                        <li><a href="#" data-page="c">c</a></li>
                    </ul>
                </div>
            </div>

           <div role="main" class="ui-content">
               <h3><i>Some title</i></h3>
           </div>

            <script>
                console.log("On index.html");
            </script>
        </div>
        <script>
            $(document).on('pageshow', function() {
                // catch the ID of the active page
                var curID = $('.ui-page-active').attr('id');
                console.log("curID: " + curID);
                switch (curID) {
                    // code here
                    default: break;
                }
            });
        </script>
    </body>
</html>

a.html:

<html>
    <head>  
        <!-- Note: no need to re-include the jQM-files. They're already around. -->
        <title>Other page page</title>
    </head>
    <body>
        <div data-role="page" id="pageA">
            <div data-role="header">
                <a href="index.html" class="ui-btn ui-icon-home ui-btn-icon-left">Home</a>
                <h1>My app title</h1>
                <div data-role="navbar">
                    <ul id="nav-bar">
                        <li><a href="a.html" data-page="a">a</a></li>
                        <li><a href="#" data-page="b">b</a></li>
                        <li><a href="#" data-page="c">c</a></li>
                    </ul>
                </div>
            </div>

           <div role="main" class="ui-content">
               <p>Page a</p>
           </div>
            <script>
                console.log("On page a.html");
            </script>
        </div>
    </body>
</html>

请注意,我data-role="page"在两个文件中都添加了具有和具有唯一ID的DIV

pageshow事件处理是关键。每次jQM显示“页面”时都会触发该事件。index.htmlwith中可以包含多个元素data-role="page",它们都被视为“页面”)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

仅在第一次使用Cookie加载页面时显示加载动画?

来自分类Dev

Rails App中的JS仅在第一次加载时

来自分类Dev

仅在第一次时如何重新加载按页眉

来自分类Dev

for循环仅在第一次迭代时执行

来自分类Dev

Javascript-动画仅在第一次按下按钮时起作用

来自分类Dev

jQuery网格仅在第一次点击时加载,而在随后的点击时不重新加载

来自分类Dev

UICollectionView第一次加载时明显滞后

来自分类Dev

第一次登录时加载 childViewControllers

来自分类Dev

在第一次加载时填充 selectizeInput

来自分类Dev

第一次加载时“$ 未定义”

来自分类Dev

未加载JavaScript代码(仅第一次)

来自分类Dev

第一次加载页面

来自分类Dev

页面仅在第一次通过 jquery 在 mvc 中刷新 ajax 调用响应

来自分类Dev

在需要时加载库而不是在第一次加载时加载?

来自分类Dev

单击函数被调用两次,但仅在第一次单击时被调用?

来自分类Dev

twitter小部件仅在第一次加载时有效,然后失败

来自分类Dev

filterTableViewController.reloadRows 仅在第一次调用时重新加载行

来自分类Dev

第一次出现数字时Javascript拆分一次

来自分类Dev

即使在第一次同意时也没有收到“刷新令牌” - Google API

来自分类Dev

第一次刷新表格时圆形图像是方形的

来自分类Dev

perl while循环-仅在第一次满足条件时退出

来自分类Dev

弹出窗口仅在第一次单击时显示div

来自分类Dev

为什么这仅在第一次显示对话框时起作用?

来自分类Dev

NodeJS:TCP套接字服务器仅在第一次时返回数据

来自分类Dev

angularjs观看单选按钮以使更改仅在第一次选择时起作用

来自分类Dev

为什么“发出”仅在我第一次单击按钮时不显示名称?

来自分类Dev

想要仅在第一次使用sed替换字符串时

来自分类Dev

仅在第一次调用函数时如何执行if语句?

来自分类Dev

仅在第一次调用递归函数时初始化值

Related 相关文章

  1. 1

    仅在第一次使用Cookie加载页面时显示加载动画?

  2. 2

    Rails App中的JS仅在第一次加载时

  3. 3

    仅在第一次时如何重新加载按页眉

  4. 4

    for循环仅在第一次迭代时执行

  5. 5

    Javascript-动画仅在第一次按下按钮时起作用

  6. 6

    jQuery网格仅在第一次点击时加载,而在随后的点击时不重新加载

  7. 7

    UICollectionView第一次加载时明显滞后

  8. 8

    第一次登录时加载 childViewControllers

  9. 9

    在第一次加载时填充 selectizeInput

  10. 10

    第一次加载时“$ 未定义”

  11. 11

    未加载JavaScript代码(仅第一次)

  12. 12

    第一次加载页面

  13. 13

    页面仅在第一次通过 jquery 在 mvc 中刷新 ajax 调用响应

  14. 14

    在需要时加载库而不是在第一次加载时加载?

  15. 15

    单击函数被调用两次,但仅在第一次单击时被调用?

  16. 16

    twitter小部件仅在第一次加载时有效,然后失败

  17. 17

    filterTableViewController.reloadRows 仅在第一次调用时重新加载行

  18. 18

    第一次出现数字时Javascript拆分一次

  19. 19

    即使在第一次同意时也没有收到“刷新令牌” - Google API

  20. 20

    第一次刷新表格时圆形图像是方形的

  21. 21

    perl while循环-仅在第一次满足条件时退出

  22. 22

    弹出窗口仅在第一次单击时显示div

  23. 23

    为什么这仅在第一次显示对话框时起作用?

  24. 24

    NodeJS:TCP套接字服务器仅在第一次时返回数据

  25. 25

    angularjs观看单选按钮以使更改仅在第一次选择时起作用

  26. 26

    为什么“发出”仅在我第一次单击按钮时不显示名称?

  27. 27

    想要仅在第一次使用sed替换字符串时

  28. 28

    仅在第一次调用函数时如何执行if语句?

  29. 29

    仅在第一次调用递归函数时初始化值

热门标签

归档