网络编程
位置:首页>> 网络编程>> JavaScript>> 用Flash来作浏览历史功能

用Flash来作浏览历史功能

作者:zishu 来源:zishu博客 发布时间:2009-08-11 14:47:00 

标签:浏览历史,flash,cookie

很多网站都有“浏览历史”这个功能,通常都是显示在页面的一侧,特别是一些购物网站,这个功能会让用户使用网站的体验好一些;例如当当网或淘宝网都有这样的功能! 



这样的功能通常的实现方式都是把记录记在客户端的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的方式! 不过有了这个思路,可以用于网站的其它功能!

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com