用Flash来作浏览历史功能
作者:zishu 来源:zishu博客 发布时间:2009-08-11 14:47:00
很多网站都有“浏览历史”这个功能,通常都是显示在页面的一侧,特别是一些购物网站,这个功能会让用户使用网站的体验好一些;例如当当网或淘宝网都有这样的功能!
这样的功能通常的实现方式都是把记录记在客户端的Cookie中,而记在cookie中又多分为两种情况:
1、记网址和标题,这个功能与服务器端无关,直接在客户端生成和显示;
2、记产品的一个key,然后传给服务器来生成这个功能;
但无论是哪种,都是在cookie中存内容;
在YUI的网站优化的一个建议中,就建议减小Cookie体积,为什么要减少?因为cookie是通过HTTP文件头来往于服务器和浏览器之间的,Cookie的大小,会决定在这之间传输内容的大少以及时间。所以要尽可能让cookie小。
那么,如果不在cookie中存放一些内容,浏览历史的的这个功能应该怎么作?存在服务器端吗,太伤了!前几天我突然想到用FLASH来实现这个功能,因为FLASH是可以存放一些内容到特定的目录的,而且与cookie无关,更特别的是他可以存放多种数据类型,只要是FLASH支持的就可以。
今天闲下无事,在家里实现一下这个功能!
先说一下原理:
网页中有javascript代码;
网页中有一个flash文件;
javascript 把标题和链接传给flash,flash把他存在客户端,然后再把已经有的历史返回给javascript,javascript再把返回的内容显示出来,这就是历史记录功能了!
代码部分没有好好想,想到哪就写到哪了,没有优化!
JavaScript部分的代码:
//在页面的最后加一个FLASH文件
function setLishi(){
var _title = document.getElementsByTagName('title')[0].innerHTML;
var _link = location.pathname;
var _body = document.getElementsByTagName('body')[0];
var _div = document.createElement('div');
var html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
html += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="1" height="1">';
html += '<param name="movie" value="flash.swf?t='+encodeURIComponent(_title)+'&l='+encodeURIComponent(_link)+'" />';
html += '<param name="quality" value="high" />';
html += '<embed src="flash.swf?t='+encodeURIComponent(_title)+'&l='+encodeURIComponent(_link)+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" ';
html += 'type="application/x-shockwave-flash" width="1" height="1">';
html += '</embed>';
html += '</object>';
_div.innerHTML = html;
_body.appendChild(_div);
}
//把FLASH传回的内容显示出来
function showLishi(ll){
var links = ll.split('_zishu_');
var html = '';
for(var l=0; l<links.length; l++){
html += '<li>'+links[l]+'</li>';
}
document.getElementById('lishi').innerHTML = html;
return;
}
setLishi();
FLASH部分的代码:
stop();
var tt = t;
var cookieName = 'lishi';
var lishi:SharedObject = SharedObject.getLocal(_root.cookieName, "/");
function getLishi(){
return(lishi.data[_root.cookieName]);
}
function setLishi(lishiCookie){
var allLishi = new Array();
allLishi[0] = tt;
if(lishiCookie.length > 0){
for(var l=0; l<lishiCookie.length; l++){
allLishi[l+1] = lishiCookie[l];
if(l == 3) break;
}
}
lishi.data[_root.cookieName] = allLishi;
}
var lishiCookie = getLishi();
var htmlLishi = lishiCookie.join('_zishu_');
getURL("javascript:showLishi('"+htmlLishi+"');");
setLishi(lishiCookie);
看下例子:http://www.zishu.cn/attachments/month_0908/flash.php
作完后的小结:
1、感觉这种方式从大小上来说,稍好于用COOKIE的方式;因为这个FLASH文件为0.3K;而种COOKIE的方式会使COOKIE在2K左右;
2、在FLASH中用getURL的方式来传送一个字符串,在IE中和URL的限制是一样的,不行大于2K;这也就是说,每次传输要在2K以内,但通常一个浏览历史的功能一次就可以了;
3、这种的代码有些麻烦,但有一个好入是可以跨浏览器,就是说你在IE中的历史,到了FIREFOX中还是存在的;
很多功能想起来很好实现,作起来问题多多,不一定和理论上一样!这也是我为什么要作这个实验的原因,因为一开始想通了,但没有实际作过!
好与坏根据自已网站的实际情况弄吧,总的来说这种方式没有非常大的优于用COOKIE的方式! 不过有了这个思路,可以用于网站的其它功能!
猜你喜欢
- asp在线备份sql server数据库: 1、备份sqlserver 代码如下:<% SQL="backup&n
- 一个站点成功与否,不是在于所用的程序语言是PHP还是ASP,也不在于用BLOG建站或是CMS建站,内容和专业很重要。博客很好起步,CMS体系
- QZONE平台的相册功能为保证加载速度一直以来以简洁的图片排列查看模式呈现相片,随着市场上各类相册产品推陈出新,用户越来越强烈的要求个人相册
- delete 删除一张大表时空间不释放,非常慢是因为占用大量的系统资源,支持回退操作,空间还被这张表占用着。truncate table 表
- 异步 innerHTMLinnerHTML 插入节点的性能的问题,通常是我们最关注的。在回答这问题时,James Padolsey 给出了他
- 24小时内记录(即86400秒)$sql="Select video_id,count(id)as n FROM `rec_dow
- 这段时间服务器崩溃2次,一直没有找到原因,今天看到论坛发出的错误信息邮件,想起可能是mysql的默认连接数引起的问题,一查果然,老天,默认
- '*****************************************************************
- Oracle公司6月9日宣布同意收购TimesTen公司,TimesTen是一家私营软件企业,其产品能提高用于股市和机票预订等需要快速响应时
- 我在网站上设置了邮件列表功能,实现用户自动订阅和发送,但很多用户输入和提交的邮件地址格式都是无效的,无法处理。请问如何解决这一问题?&nbs
- 清除浮动一个凡是做页面的人都会遇到的一个东西,但是是否大家都能够清楚的知道,全方位的了解呢?于是一闲下来了马上写了这样的一篇文章,不能讲面面
- 函数名称:ReplaceHTML参数:@Textstr作用:去掉 @Textstr 内的HTML代码备注:需要给数据库访问者master.s
- Liwu_Items表,CreateTime列建立聚集索引 第一种,sqlserver2005特有的分页语法 代码如下:declare @p
- 看看怎样抓到你:<%Dim objCMFUDim strModifiedSet objCMFU 
- ASP中转换unicode编码为GB编码方法:<% function urldecode(encodestr)
- 大家知道,mailto是网页设计制作中的一个非常实用的html标签,许多拥有个人网页的朋友都喜欢在网站的醒目位置处写上自己的电子邮件地址,这
- 对于软件来说,每一个新版本的推出都应该是一种进步,不可否认,阿里旺旺2008版相较于之前的版本的确是有很多的进步,但进步的同时却也有着比之前
- 在开发WEB应用程序中,我们经常需要对文件系统中的驱动器、文件夹和文件进行处理,比如收集驱动器的相关信息;创建、添加、移动或删除文件夹和文件
- 大家做网站,特别是自己写的代码,常常担心被一些黑客入侵服务器,从而导致网站代码被盗,给自己带来一些损失。那么我们怎么样做,就算黑客盗了你的代
- osql 工具是一个 Microsoft Windows 32 命令提示符工具,您可以使用它运行 Transact-SQL 语句和脚本文件。