[译者注将本文的最后示例代码拷贝至文本文件中更名文件为格式文件在浏览器中运行本文以该示例代码讲解]
简介
====================================
问题是我想解决自动访问这个页面能够限制你每一天只访问它一次(不要忘记在这链接上点击)
现在为止每次一开始我做的第一件事就是手工选择我的书签加载这个页面
为什么不为它创建一个简单的脚本程序呢?
因为我想让它在Netscape和IE下都能够同样的工作我开始学习Javascript
解决
====================================
主题思想很简单创建一个页面并测试一下今天这个页面是否已被加载过
如果没有加载那就通过它链接到并且设置
这个页面作为浏览器的主页
获取页面并重定向是很容易的问题是如何记忆这个页面已被访问过
因为Javascript没有文件访问的功能看来我们只能使用cookies了
Cookies是一个有大小限制的变量它与一个服务器的域名相关联
默认情况下cookie的生存期是当浏览器关闭时被清空(注意不是当你离开
这个页面的时候)但可以用一个脚本程序改变这种情况
在用户关闭浏览器后使cookies能够存储下来Netscape在文件中使用所有的
Cookie而IE分别存储每个cookie此外不同的浏览器会带来一些意想
不到的情况你必须确定一个用户在它的浏览器设置中是否关闭了cookies
一切都很好也很妙只是现在我还未在IE中测试它调用示例Javascript语句
cookieExpires = APR + nLyear + GMT;
okies = cookieName + = + cookieValue + ; expires= + cookieExpires;
然后调用
documentwrite(okie);
okie是空的
在试验和研究了一下上面的示例程序后会发现
你不能够读和显示cookie如果你想看一下这个cookie你需要指定与它相同的另一个字符串变量如下
okie = cookieName + = + cookieValue + ; expires= + cookieExpires;
myvar = cookieName + = + cookieValue + ; expires= + cookieExpires;
documentwrite(myvar);
浏览器用了不同的日期格式
Netscape使用GMT结束IE使用UTC这是因为它可以更好的构建一个日期象下面这样
var expdate = new Date()
cookieExpiressetTime (expdategetTime() + * ( * * * )) //+ day
cookieExpirestoGMTString()
当你显示日期部分
documentwrite(expdategetYear() + <br> + expdategetMonth() + <br> + expdategetDate());
对于的日期在IE中显示为//在Netscape下显示//(注已确定是一些较低版本的
Netscape 浏览器的YK问题)
示例中看到像下面这样的部分
if (platform == Mac) {
lastVisit = lastVisit ( * * * )
}
但我不可能检测它
日期对象有getDate和getDay的方法第二个方法返回在一周中天的索引号
知道了这些基本上就没问题了(现在你可以看一下)
[译者注将本文的最后示例代码拷至文本文件中并保存htm格式然后运行]
最后要说明的是这不仅是一个专用的JS脚本如果你想将它用在你的web页面上你必须最小程度的使用不同的浏览器测试它并注意它们的版本许多的脚本程序包含了浏览器类型检测和大量的ifelse语句以处理这样不同
示例页面源代码
<html>
<head>
<title>Homepage</title>
</head>
<body>
<a >Manual redirection<br></a>
<a javascript:ResetCookie()>Cookie reset</a>
<script language=JavaScript>
<!
var bVisitedToday = false;
var lastVisit = GetCookie(lastVisit);
if (lastVisit != null)
{
lastVisit = * lastVisit;
var lastHere = new Date(lastVisit);
var rightNow = new Date();
if(lastHeregetYear() == rightNowgetYear()
&& lastHeregetMonth() == rightNowgetMonth()
&& lastHeregetDate() == rightNowgetDate())
{
bVisitedToday = true;
}
}
if(bVisitedToday == false)
{
setLastlastVisitCookie();
windowlocation=
}
else
{
//windowlocation=about:blank
}
function getCookieVal (offset)
{
var endstr = okieindexOf (; offset);
if (endstr == )
endstr = okielength;
return unescape(okiesubstring(offset endstr));
}
function GetCookie (name)
{
var arg = name + =;
var alen = arglength;
var clen = okielength;
var i = ;
while (i < clen) {
var j = i + alen;
if (okiesubstring(i j) == arg)
return getCookieVal (j);
i = okieindexOf( i) + ;
if (i == ) break;
}
return null;
}
function SetCookie (name value)
{
var argv = SetCookiearguments;
var argc = SetCookieargumentslength;
var expires = (argc > ) ? argv[] : null;
var path = (argc > ) ? argv[] : null;
var domain = (argc > ) ? argv[] : null;
var secure = (argc > ) ? argv[] : false;
okie = name + = + escape (value) +
((expires == null) ? : (; expires= + expirestoGMTString())) +
((path == null) ? : (; path= + path)) +
((domain == null) ? : (; domain= + domain)) +
((secure == true) ? ; secure : );
}
function setLastlastVisitCookie ()
{
var rightNow = new Date();
var expdate = new Date();
expdatesetTime (expdategetTime() + * ( * * * )); //+ day
SetCookie (lastVisit rightNowgetTime() expdate /);
}
function ResetCookie()
{
SetCookie(lastVisit null /);
}
// >
</script>
</body>
</html>