版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处http://xinyistudio.vicp.net/和作者信息及本声明
[译者注:将本文的最后示例代码拷贝至文本文件中,更名文件为homepage.htm格式文件,在浏览器中运行,本文以该示例代码讲解]
简介
=================================================================
问题是我想解决自动访问http://www.thehungersite.com。这个页面能够限制你每一天只访问它一次(不要忘记在这链接上点击)。
现在为止,每次一开始我做的第一件事就是手工选择我的书签加载这个页面。
为什么不为它创建一个简单的脚本程序呢?
因为我想让它在netscape和ie下都能够同样的工作,我开始学习javascript。
解决
=================================================================
主题思想很简单:创建一个页面并测试一下今天这个页面是否已被加载过,
如果没有加载,那就通过它链接到http://www.thehungersite.com,并且设置
这个页面作为浏览器的主页。
获取页面并重定向是很容易的,问题是如何记忆这个页面已被访问过。
因为javascript没有文件访问的功能,看来我们只能使用cookies了。
cookies是一个有大小限制的变量,它与一个服务器的域名相关联,
默认情况下cookie的生存期是当浏览器关闭时被清空(注意:不是当你离开
这个页面的时候),但可以用一个脚本程序改变这种情况,
在用户关闭浏览器后使cookies能够存储下来,netscape在文件中使用所有的
cookie,而ie分别存储每个cookie。此外,不同的浏览器会带来一些意想
不到的情况,你必须确定一个用户在它的浏览器设置中是否关闭了cookies。
一切都很好也很妙,只是现在我还未在ie中测试它,调用示例javascript语句:
cookieexpires = "01-apr-" + nlyear + " gmt";
document.cookies = cookiename + "=" + cookievalue + "; expires=" + cookieexpires;
然后调用
document.write(document.cookie);
document.cookie是空的。
-------------------------------------------------------------------------------------------------------
在试验和研究了一下上面的示例程序后,会发现:
1。你不能够读和显示cookie。如果你想看一下这个cookie你需要指定与它相同的另一个字符串变量,如下:
document.cookie = cookiename + "=" + cookievalue + "; expires=" + cookieexpires;
myvar = cookiename + "=" + cookievalue + "; expires=" + cookieexpires;
document.write(myvar);
2. 浏览器用了不同的日期格式:
netscape使用"gmt"结束,ie使用“utc",这是因为它可以更好的构建一个日期,象下面这样:
var expdate = new date()
cookieexpires.settime (expdate.gettime() + 1 * (24 * 60 * 60 * 1000)) //+1 day
cookieexpires.togmtstring()
当你显示日期部分
document.write(expdate.getyear() + "<br>" + expdate.getmonth() + "<br>" + expdate.getdate());
对于2000-11-15的日期,在ie中显示为2000/10/15,在netscape下显示100/10/15(注:已确定是一些较低版本的
netscape 浏览器的y2k问题)
示例中看到像下面这样的部分:
if (platform == "mac") {
lastvisit = lastvisit - (24 * 60 * 60 * 1000)
}
但我不可能检测它。
日期对象有getdate和getday的方法,第二个方法返回在一周中天的索引号。
-------------------------------------------------------------------------------------------------------
知道了这些,基本上就没问题了(现在你可以看一下homepage.htm)
[译者注:将本文的最后示例代码拷至文本文件中并保存htm格式,然后运行]
最后要说明的是,这不仅是一个专用的js脚本,如果你想将它用在你的web页面上你必须最小程度的使用不同的
浏览器测试它并注意它们的版本,许多的脚本程序包含了浏览器类型检测和大量的if...else语句,以处理这样不同。
示例页面homepage.htm源代码
===============================================================
<html>
<head>
<title>homepage</title>
</head>
<body>
<a href='http://www.thehungersite.com/'>manual redirection<br></a>
<a href="javascript:resetcookie()">cookie reset</a>
<script language="javascript">
<!--
var bvisitedtoday = false;
var lastvisit = getcookie("lastvisit");
if (lastvisit != null)
{
lastvisit = 1 * lastvisit;
var lasthere = new date(lastvisit);
var rightnow = new date();
if(lasthere.getyear() == rightnow.getyear()
&& lasthere.getmonth() == rightnow.getmonth()
&& lasthere.getdate() == rightnow.getdate())
{
bvisitedtoday = true;
}
}
if(bvisitedtoday == false)
{
setlastlastvisitcookie();
window.location="http://www.thehungersite.com/"
}
else
{
//window.location="about:blank"
}
function getcookieval (offset)
{
var endstr = document.cookie.indexof (";", offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
}
function getcookie (name)
{
var arg = name + "=";
var alen = arg.length;
var clen = document.cookie.length;
var i = 0;
while (i < clen) {
var j = i + alen;
if (document.cookie.substring(i, j) == arg)
return getcookieval (j);
i = document.cookie.indexof(" ", i) + 1;
if (i == 0) break;
}
return null;
}