




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
百度文库浏览器分析及实现一、 引子2003年开始玩Flash,完了两年就戒掉了;长时间不用不完慢慢就生疏了。最近应客户的需要,希望能在文档系统中实现类似百度文库的效果。考查一番,咋看起来百度用的是FlashPaper技术,也看了看FlexPaper,在GoogleCode上还看到了一个超大文件的示例,可惜链接打不开,无法去详细分析他们了。在能看到的应用中,FlashPaper、FlexPaper都不能达到在互联网上动态加载大文档的用户体验需求;唯独百度文库有这样的用户体验,因此就只能拿百度文库开刀了,希望李彦宏同志不要见怪。姑且拿六十八个经典小故事作为示例,该文档页数足够多,能够展示动态加载的效果。二、 百度文库浏览器原理分析步骤1. 找到六十八个经典小故事对应的链接;2. 清空IE缓存,在IE中浏览该页面;3. 使用导航将文档浏览至最后;4. 抓取IE缓存中的内容;5. 材料已取好,分析开始。三、 百度文库浏览器代码分析一进来,刘姥姥进了大观园了,这个JavaScript脚本看得人脑袋那个大啊,这条路走起来挺艰难,换个思路吧;找个Flash反编译工具,反编译一下,取出来ActionScript,这个好歹还有个分行短句啊,总算还是个代码。整理整理代码的层次结构,按照包组织一下,大致能确认应该在baidu这个文件夹吧;再看看,lib大致是用于json处理的;ui是用于用户自定义控件;iknow就应该是程序入口吧,按照一般程序要的思路先找一找main吧,果然还真有一个main类,有意思。下面这几句代码大概就是与外部进行参数交换的吧:var _loc_2:* = _loc_1docurl | :8960/play;var _loc_3:* = _loc_1docid | c881e53a580216fc700afd05;var _loc_4:* = int(_loc_1fpn) | 2;var _loc_5:* = int(_loc_1npn) | 5;this._reader.fpn = _loc_4;this._reader.npn = _loc_5;this._reader.docURL = _loc_2.replace(/(/)+$/, ) + / + _loc_3 + ?;如此以来就可以查找docurl、docid、fpn、npn这几个参数了,在JavaScript或者json中应该有体现的。在看一看Reader类,再看看DocViewer类大致就知道了百度的FlashPaper的Reader的原理了。if (this._firstPagesNum = -1)tmpURL = this._docURL + pn= + (this._pagesLoaded + 1) + &rn= + this._normalPageNum;elsetmpURL = this._docURL + pn=1&rn= + this._firstPagesNum;this._firstPagesNum = -1;var binaryRequest:* = new URLRequest(tmpURL);binaryLoader.load(binaryRequest);这就是Reader获取FlashPaper资源文件了;binaryLoader.addEventListener(ProgressEvent.PROGRESS, this.binaryLoading);binaryLoader.addEventListener(Event.COMPLETE, this.binaryLoadComplete);binaryLoader.addEventListener(IOErrorEvent.IO_ERROR, this.binaryLoadError);这个就是定义的装载进度、装载完成、装载失败的几个事件响应了;this._delayPreLoadID = setInterval(this.preLoad, 1000, _loc_3);这个是用于预装载的动作,实现边查看边下载其他片段的。四、 百度文库浏览器参数分析根据以上代码片段就可以知道百度FlashPaper Reader的工作原理了,在初始化时根据JavaScript的参数装载FlashPaper片段,使用docurl指定路径(可以是相对路径,可以是绝对路径),使用docid指定文档的GUID,fpn指定文档起始序号,rn指定文档片段的页数;根据百度文档内部的定义应该是将文档以5页或者10页进行组织,所以fpn=5*X+1;rn=5|10。五、 百度文库浏览器外部调用分析回过头在看客户端调用的JavaScript代码就有针对性了,不用头大了;先看一看html页的代码吧,打开“9daa5522aaea998fcc220e73.html”页面,看一看里面的代码,看看有不有对应的参数,您别说还真就有,不管咋说吧,代码有点阅读困难,好在只定位于使用这段代码,咱改改参数用用,其他的就不深入研究了。function Reader()function B()if(baidu.swf.getVersion()return trueelse_id.innerHTML=文档预览需要最新版本的Flash Player支持。您尚未安装或版本过低,建议您:;return falsethis.create=function(D,C)baidu.swf.create(id:reader,width:717,height:700,ver:9.0.0,errorMessage:Please download the newest flash player.,url:/static/flash/reader.swf,bgColor:#FFFFFF,wmode:window,allowfullscreen:true,vars:docurl:/play,docid:9daa5522aaea998fcc220e73 ,/貌似这就是id了fpn:5,npn:5,D);A(D);function A(C)baidu.on(C,mousewheel,function(D)var F=D.wheelDelta;var E=-3;if(F0)E=3baidu.swf.getMovie(reader).NS_IK_doMouseWheel(E);baidu.preventDefault(D),false)var DOC_INFO=doc_id:9daa5522aaea998fcc220e73,cid:134,price:0,value_average:7;var _reader=new Reader();_reader.create(readerContainer,9daa5522aaea998fcc220e73);baidu.each(selfChangeCategory,adminChangeCategory,selfChangePrice,function(B,A)baidu.on(B,click,function(C)login.check(xy(view.changeDocInfo,B);baidu.preventDefault(C);baidu.on(addToStore,click,function(A)window.open(/do/add?it=+encodeURIComponent(document.title)+&iu=+encodeURIComponent(location.href)+&tn=文库&fr=wk#nw=1,_s,scrollbars=no,width=600,height=450,right=75,top=20,status=no,resizable=yes);pop.show(提示,url:/static/html/empty.html,width:420,height:250);document.AddToStore.submit();baidu.preventDefault(A);baidu.each(downloadTop,downloadButton,function(A)baidu.on(A,click,function(B)log.send(down,download,fr:down);login.check(view.download);baidu.preventDefault(B);var rate=new Rate(rateContainer);rate.create(7);if(G(kw)G(kw).value=;六、 百度文库现场取材实现既然分析清楚了,下一步将百度文库的文件结构整清楚,然后放入对应的内容,稍微对静态代码进行一些调整;部署到根目录即可使用;这里面有百度对FlashPaper文档swf的改造,暂且不说了,其实就是追加了一个json的文件头数据块,对咱们当前要就地取材实现而言没有任何障碍。文档结构整理如下:将文件都归到对应的文件夹下,既然百度对FlashPaper/FlexPaper对应的swf做了改造,那好就将swf文件改名为swfx吧。值得注意的是需要在IIS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 舞蹈房装修方案(3篇)
- 个人店铺推销方案(3篇)
- DB23-T3021-2021-气象灾害防御重点单位评估规范-黑龙江省
- DB23-T2923-2021-饲用大豆半干青贮加工与贮藏技术规程-黑龙江省
- DB23-T2889-2021-杨树人工造林间作党参栽培技术规程-黑龙江省
- 全力改进服务管理制度
- 小型公司员工管理制度
- 利润摆摊定价方案(3篇)
- 斜坡荒地改造方案(3篇)
- 公司测绘质量管理制度
- 安全生产大家谈
- 癫痫大发作护理
- 陕西水务发展集团招聘笔试真题2024
- 七下语文教材课后习题答案
- 2024年中考语文常考名著习题训练:《骆驼祥子》
- 右旋糖酐纳米硒的制备表征及其稳定性和体外抗氧化活性分析
- 水箱安装施工方案范本
- 2025年初中学业水平考试语文模拟试卷(三)
- 分离工程(山东联盟)知到智慧树章节测试课后答案2024年秋青岛科技大学
- 2024年06月浙江浙江泰隆商业银行社会招考笔试历年参考题库附带答案详解
- 劳动争议调解基础知识
评论
0/150
提交评论