用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的方式! 不过有了这个思路,可以用于网站的其它功能!
猜你喜欢
- Tensor有不同的数据类型,每种类型分别有对应CPU和GPU版本(HalfTensor除外)。默认的Tensor是FloatTensor,
- 亲测十分靠谱下面是解决该问题的方法第一步:关闭SIP系统保护1.重启系统时按住Command+R进入恢复模式(记住是你在重新启动时,不是启动
- 在编写程序时,数据库结构会经常变化,所以经常需要编写一些数据库脚本,编写完成后需发往现场执行,如果已经存在或者重复执行,有些脚本会报错,所以
- 几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器。在本文中,我们通过一个简单的注册表单页面应用去理解D
- 先给大家介绍下sqlserver给表添加新字段、给表和字段添加备注、更新备注及查询备注,代码如下所示:-- 添加新字段及字段备注的语法USE
- ip正则式为:r'(([12][0-9][0-9]|[1-9][0-9]|[1-9])\.){3,3}([12][0-9][0-9]
- 前言在学习操作系统的时候,我们应该都学习过临界区、互斥锁这些概念,用于在并发环境下保证状态的正确性。比如在秒杀时,100 个用户同时抢 10
- kafka的认证方式一般有如下3种:1.SASL/GSSAPI 从版本0.9.0.0开始支持2.SASL/PLAIN 从版本0.10.0.0
- 通过三种方式给大家介绍,具体详情如下所示:方式一:原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典
- 求字符串中最大的递增子序列数据库环境:SQL SERVER 2005如题,求字符串“abcbklmnodfghijkmer”中最大的递增子序
- /// <summary> /// 获得目标
- 身份证号码的编排规则前1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7~14位
- 最近在做后台管理系统的时候遇到要使用富文本编辑器。最后选择了ueditor,我的项目使用 vue+vuex+vue-router+webpa
- 遇到一个难题,在无物理键盘情况下,通过页面软键盘在页面文本框输入汉字,不知道51js的各位大牛有没有遇到过这种需求,如果遇到过是如何解决的,
- 一、关于exists查询explain select * from vendor where EXISTS(select * from ar
- Sodium 扩展在 PHP7.2 后是跟随 PHP 源码一起发布的,只需要在编译的时候加上 --with-sodium 即可安装成功。如果
- 一、实验内容 对于下面这幅图像,编程实现染色体计数,并附简要处理流程说明。二、实验步骤1.中值滤波2.图像二值化3.膨胀图像4.腐
- 本文实例讲述了Python实现获取照片拍摄日期并重命名的方法。分享给大家供大家参考,具体如下:python获取照片的拍摄日期并重命名。不支持
- 前言序锦很多时候,当我们在使用编辑器的时候,遇到复制粘贴,修改别人代码等等的时候,都会遇到这个让人头疼的问题,那就是如何解决格式问题,今天就
- 之前一直有过疑惑为什么MySQL数据库存timestamp可以无视时区问题.在业务中也是一直使用Laravel框架,内置的Migration









