Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何仅在用户登录页面时运行脚本_Javascript_Html - Fatal编程技术网

Javascript 如何仅在用户登录页面时运行脚本

Javascript 如何仅在用户登录页面时运行脚本,javascript,html,Javascript,Html,我有一些用Javascript编写的脚本,显示加载站点元素的进度。我把这个脚本放在index.html文件中,所以它只在主页上运行。它工作得非常好,但现在当你登陆index.html时,以及当你从子页面返回主页时,它显示了进展,这是我的问题,因为主页已经被缓存,这是浪费时间 我的问题是:如何只在用户登陆页面时运行脚本,而不是在用户从子页面返回时运行脚本?当用户第一次点击index.html时创建cookie。检查cookie并仅在未设置cookie时运行脚本 if(!isset($_COOKIE

我有一些用Javascript编写的脚本,显示加载站点元素的进度。我把这个脚本放在index.html文件中,所以它只在主页上运行。它工作得非常好,但现在当你登陆index.html时,以及当你从子页面返回主页时,它显示了进展,这是我的问题,因为主页已经被缓存,这是浪费时间


我的问题是:如何只在用户登陆页面时运行脚本,而不是在用户从子页面返回时运行脚本?

当用户第一次点击index.html时创建cookie。检查cookie并仅在未设置cookie时运行脚本

if(!isset($_COOKIE['something'])) {
    // run your loading script;
    setcookie('something','someValue');
}
在将任何输出发送到浏览器之前,请确保您拥有上述代码。

尝试控制何时/何时不执行Javascript。


<html>
<head>
..
</head>
<body onload="doStuff()">
...
<script type="text/javascript" language="JavaScript">
//<![CDATA[
 function doStuff(){
   //check condition
   if (readCookie('checkFirstTime')!=null) return;

   //otherwise set the flag && do your thing
   createCookie('checkFirstTime','yep',1);
   alert("Welcome home Yo!");
   ...
 }

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

//]]>
</script>
...
</body>
</html>
.. ... // ...
除了Cookie,您还可以使用document.Referer:

<script>
if(document.referrer &&
document.referrer.indexOf("yoursite.com") == -1)
{
    // Page loading process script goes here.
}
</script>

如果(文件参考)&&
document.referer.indexOf(“yoursite.com”)=-1)
{
//页面加载过程脚本位于此处。
}

body/form中的onload就可以了..cookie不会一直工作,因为它们的持久性与缓存不相关。你的进度指标是如何工作的?显示时间是否固定?取决于需要加载多少内容。当主页被缓存,我从子页面返回时,它就出现了,并立即消失。但这仍然不是我所期望的。我认为Wayne关于document.referer的想法很容易解决问题。如果你不得不选择其中一个,我会选择Cookie而不是referer,因为它失败了,如果你离开网站回来的话。将它们一起使用将略有帮助(当导航站点时丢失cookies时)。这似乎解决了我的问题,但在没有第一个document.refferer条件的情况下,它可以正常工作。我遗漏了什么吗?第一个文档。推荐人要测试是否有文档推荐。有时“很少”它被阻止并且不存在。如果没有它,加载过程将显示给这些人,并且只能防止显示给“已知”来自子页面的人。我猜您键入了URL,因此浏览器对推荐人没有任何价值-它是空的。没有任何问题。。。我把这两个放在一起,因为同样的逻辑也能打破框架。然后有必要检查文档引用是否存在。但是当我按照您的方式(使用第一个document.referer)时,它就不起作用了-脚本从未执行,我的进度指示器也从未显示。你的想法(但没有第一个document.referer)解决了我的问题,但我仍然很好奇,为什么这对我不起作用,当我按照你的方式进行时。详细说明我告诉JMC Creative的内容:isset()、$U COOKIE[]和setcookie()不是内置的javascript属性/函数。只是认为需要一个一般性的解释,而不是管理cookie的两个详细函数。无论如何,我已经编辑了答案。希望能有帮助