百度文库浏览器分析及实现.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
百度文库浏览器分析及实现 引子 2003年开始玩Flash,完了两年就戒掉了;长时间不用不完慢慢就生疏了。最近应客户的需要,希望能在文档系统中实现类似百度文库的效果。考查一番,咋看起来百度用的是FlashPaper技术,也看了看FlexPaper,在GoogleCode上还看到了一个超大文件的示例,可惜链接打不开,无法去详细分析他们了。 在能看到的应用中,FlashPaper、FlexPaper都不能达到在互联网上动态加载大文档的用户体验需求;唯独百度文库有这样的用户体验,因此就只能拿百度文库开刀了,希望李彦宏同志不要见怪。 姑且拿《六十八个经典小故事》作为示例,该文档页数足够多,能够展示动态加载的效果。 百度文库浏览器原理分析步骤 找到《六十八个经典小故事》对应的链接; 清空IE缓存,在IE中浏览该页面; 使用导航将文档浏览至最后; 抓取IE缓存中的内容; 材料已取好,分析开始。 百度文库浏览器代码分析 一进来,刘姥姥进了大观园了,这个JavaScript脚本看得人脑袋那个大啊,这条路走起来挺艰难,换个思路吧;找个Flash反编译工具,反编译一下,取出来ActionScript,这个好歹还有个分行短句啊,总算还是个代码。 整理整理代码的层次结构,按照包组织一下,大致能确认应该在baidu这个文件夹吧;再看看,lib大致是用于json处理的;ui是用于用户自定义控件;iknow就应该是程序入口吧,按照一般程序要的思路先找一找main吧,果然还真有一个main类,有意思。 下面这几句代码大概就是与外部进行参数交换的吧: var _loc_2:* = _loc_1[docurl] || :8960/play; var _loc_3:* = _loc_1[docid] || c881e53a580216fc700afd05; var _loc_4:* = int(_loc_1[fpn]) || 2; var _loc_5:* = int(_loc_1[npn]) || 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; } else { tmpURL = this._docURL + pn=1rn= + 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代码就有针对

文档评论(0)

wx171113 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档