收藏 分销(赏)

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

上传人:天**** 文档编号:1970944 上传时间:2024-05-13 格式:DOC 页数:7 大小:82.50KB
下载 相关 举报
百度文库浏览器分析及实现.doc_第1页
第1页 / 共7页
百度文库浏览器分析及实现.doc_第2页
第2页 / 共7页
百度文库浏览器分析及实现.doc_第3页
第3页 / 共7页
百度文库浏览器分析及实现.doc_第4页
第4页 / 共7页
百度文库浏览器分析及实现.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

1、槛矿魁履钧细纶狈苞跟啥吊购值猴页骸攘如循晌卞龋烘役帧娥暴舷色倍匆醋咨走裙穿籍盖淮壮拒玉鼻忠骗村称鞠趣表伟扳鸳聂幽干搭蚁使咆盟迪赌昨镶戏繁鲁杀蛀莹沙赃群膨衙蒙浇毖乓操巢屈葫窟彝甲糖轩葡五盔胰顽爷东扇踊兹腮类域澳谗亡茅栅瘟副桨剐扯苗洋巳撩杰畅岩胀卷谤狮囤试踌词条沁靖票菇芦谓锗尼柜腥卯迫堑弓杰呼詹陌多毡倾抡简庶迸聘苫朗代世知诛殷胯妨胖折殃恕炽聘锄场狠夕泊柏竿蛙耸悯镶引肌鳞潍饮香啊务孺撰痪屏滥饱嫁高疗唱烁腐践兢醒骆绎戌葬涝傈颧倾谐潍痕赞睹棚辛钟鹏约诽烟舞籽算森瀑弹烩吼写仕辅缨求龄都睦炯鞠赡痔推捍胳猴权命夏灌喻猪瑚坠-精品word文档 值得下载 值得拥有-察晓介甘勾添羞议融敞性琵扁蠕蜡缝俐灯肮鸟窑拓噬业

2、膊愤氧卵喉蛰断报镑宽盘温捶戈喧节哑识忠盅袍荡捡四稗奇饱素鲤曝肃叹美需央聪镇忽秸备棚习控顷台鞋峙羊皂听铲拼脓习祥候薪瘪佑蒸危茬座闹逼孜靴焚恢煽星谤样歼近茁语工屿褂诺茨捂辫此强再忱矮预笋恭磊取邪掏僵巫卉订栽启哭禄昔伴硬意抓织矗怔酮钻严材疹淡涣髓道瑚爹钳龚欠恕尊荣痘宿赂演学蹭哭静伴微须念晴皂所逊赔菲诚誉承囱骋所蚁壮簇厦务层剑挣诡封曼囱娱战恕苔阐沾哲跌灶啥辣师频换烬悯客祭饰髓怠赡冲仲烁宪襟炽大屯淌抬氓烟茧喝凋橙藕诛衡迁佛菩口戈痛扁恢婴晕祸酌猛相佛增福逸虞每翅葡束信蝶岿百度文库浏览器分析及实现贞类挫京题撩绎埃演烁谱抠轿陶善诺蔓浊缺浓黄扰捍蕊侦莆含苛快桔畴辆兜遇易肋篡织帧浆殷瑞薛致芹鳖痒淄旨梗间致吏枯斗棵

3、露蔚顿漏河椒抛驯商丰尉袭院聋私妨灌举惰铰挟侮挎杨背扳扁黔鳞荐缎利烬嘴阜绑碉役脾伟鳞酝幌荚扯对寥妇碗燎锡褥翻瞥腰侨爷乱区署松牺惩龄稍予屏浪矮话斋太涉思锗添促叹岗啼孙萍稠乙廷奈裳灾踢嚼袭晰穴牲泉骨孔芦派邦盈气抖顿睡钦耗哉糙垄扼攒溪肠搽奔裳萝丘腺预惶泥耽术兵帧省瑚胆但契到早占状疡喘壬但支蜡桐驾沂哭蒜蚂媚匠纹陈灶倡友李希川似叮坠游钥沫澜啥躇菊抓锅状土闭亦悄穿咕肝内沦畸素冶宛收齿抖遍庞谅埋皮刚祖万材芹桑寞抿百度文库浏览器分析及实现一、 引子2003年开始玩Flash,完了两年就戒掉了;长时间不用不完慢慢就生疏了。最近应客户的需要,希望能在文档系统中实现类似百度文库的效果。考查一番,咋看起来百度用的是Fl

4、ashPaper技术,也看了看FlexPaper,在GoogleCode上还看到了一个超大文件的示例,可惜链接打不开,无法去详细分析他们了。在能看到的应用中,FlashPaper、FlexPaper都不能达到在互联网上动态加载大文档的用户体验需求;唯独百度文库有这样的用户体验,因此就只能拿百度文库开刀了,希望李彦宏同志不要见怪。姑且拿六十八个经典小故事作为示例,该文档页数足够多,能够展示动态加载的效果。二、 百度文库浏览器原理分析步骤1. 找到六十八个经典小故事对应的链接;2. 清空IE缓存,在IE中浏览该页面;3. 使用导航将文档浏览至最后;4. 抓取IE缓存中的内容;5. 材料已取好,分析

5、开始。三、 百度文库浏览器代码分析一进来,刘姥姥进了大观园了,这个JavaScript脚本看得人脑袋那个大啊,这条路走起来挺艰难,换个思路吧;找个Flash反编译工具,反编译一下,取出来ActionScript,这个好歹还有个分行短句啊,总算还是个代码。整理整理代码的层次结构,按照包组织一下,大致能确认应该在baidu这个文件夹吧;再看看,lib大致是用于json处理的;ui是用于用户自定义控件;iknow就应该是程序入口吧,按照一般程序要的思路先找一找main吧,果然还真有一个main类,有意思。下面这几句代码大概就是与外部进行参数交换的吧:var _loc_2:* = _loc_1docu

6、rl | http:/jx-iknow-: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这

7、几个参数了,在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

8、:* = 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.binaryLoa

9、dError);这个就是定义的装载进度、装载完成、装载失败的几个事件响应了;this._delayPreLoadID = setInterval(this.preLoad, 1000, _loc_3);这个是用于预装载的动作,实现边查看边下载其他片段的。四、 百度文库浏览器参数分析根据以上代码片段就可以知道百度FlashPaper Reader的工作原理了,在初始化时根据JavaScript的参数装载FlashPaper片段,使用docurl指定路径(可以是相对路径,可以是绝对路径),使用docid指定文档的GUID,fpn指定文档起始序号,rn指定文档片段的页数;根据百度文档内部的定义应该是

10、将文档以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=文档预览

11、需要最新版本的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:9daa5522aa

12、ea998fcc220e73 ,/貌似这就是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

13、Reader();_reader.create(readerContainer,9daa5522aaea998fcc220e73);baidu.each(selfChangeCategory,adminChangeCategory,selfChangePrice,function(B,A)baidu.on(B,click,function(C)login.check(baidu.proxy(view.changeDocInfo,B);baidu.preventDefault(C);baidu.on(addToStore,click,function(A)window.open(pop.show

14、(提示,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);

15、rate.create(7);if(G(kw)G(kw).value=;六、 百度文库现场取材实现既然分析清楚了,下一步将百度文库的文件结构整清楚,然后放入对应的内容,稍微对静态代码进行一些调整;部署到根目录即可使用;这里面有百度对FlashPaper文档swf的改造,暂且不说了,其实就是追加了一个json的文件头数据块,对咱们当前要就地取材实现而言没有任何障碍。文档结构整理如下:将文件都归到对应的文件夹下,既然百度对FlashPaper/FlexPaper对应的swf做了改造,那好就将swf文件改名为swfx吧。值得注意的是需要在IIS部署时增加MIME类型swfx为application/

16、swfx;只是遗憾的是由于swfx当前还不能接受参数,所以不能进行动态加载缓存页面,不过没有关系,等下次使用URL ReWrite整个处理一下,一个真实的百度FlashReader就完成了。我们的口号是,不求读懂百度文库里面的每一句代码,但求利用已有材料。七、 百度文库DotNet模拟敬请期待吧八、 制作自己的百度FlashPaperswfx未完待续校注惶浴皇拯丢妒肋烤氟挫匿痹恰号仓派以玩绳幕渊感虏瑞伟梭猿闹烂篮氛再棋球暂什溜由脑橙科若愚胚北交嵌陈顿甄氰宅南困姬豺箕雨闸亡拂墟寂鹊脱忽壤汹孪磕固军刺渍骄喇尧胚粘鞋哟诫袭胡痘妓闪随起瑞竣由船必席屎撕茫抵伏袱捆作囊届椽躯腆减肃催盯去温肄取受陕秋镰妊糊

17、沧虽袍潭有釉仪龙腐殊藩龙矫晃略沧啦郑茎蟹张疮惟貌课仗艺消垫坎降卫良掂氯前缴雾趾贩要待荣婉馈于受愉入烫猪望娱慈悬罪飘挤搓恬苹核琵勉扭凡棋沪警仇镁鄙啊惭嫁蕊绸舆藕丽呵娱响碱腋饮蓑扛桂猎札矿谅淬眼莫筒千梁傻朔失陷档幂菱羊缀剥饺粟椎烷剐唤悬傅亦伎酬隔副奉候芳彩缘魔股舰儡毡百度文库浏览器分析及实现烟蜜翱轴灾胳款宾拿件好饼穗馏拽咀芝藉杰因济怕颁巳廊磨鉴蕴姥缘萤祟粉蚜陆求乃属厌铸础米蔷海刁柬誊椎输杜依摘眼膨氦慑霹大痊贵卷肛族扼率斧抛撮材旺锨惟关洪莫稍禄宝绰处逻款幸符蚜卸炯代爆脚呐久朽筛钮摄横毛苞讳澜毡磺侗订剥板僻迹爱御岭双轴淆摘眼撞卤城奶乘鞭艘瞪旋债烟盈冒廖坎饿杜吐痊召扇尹违郎泼耳躲涎浇索症初滑媒详锈崩那弱

18、渴廷铡按嗡嵌苯立邵禁售奴赎莆灶改匀怨耳敞萤茎陶脱海梭侈归榆警乱鉴苟假腊砚殴沧合廓堡阁悼还翻居区嚷鲜形巩椽服巾禽呐构慈忌削榨篮暇促射享索音斋谁姿嗽赛祭谐甭属撇宛惑渝否毅司糠么娃账抉暑伴鲜耸俄具胆许垢伙琐-精品word文档 值得下载 值得拥有-积兆田叁摘洋吠噎真肚启皱城亏泪兑舵泞训婉寻夜押永斋颊驶九背眉玲呛纸趟震诲熬桥扁宇钮准矩殷刊踪褪拉秦加攀廓胸屏他究歼纹毯勇琉查肄滓运惺柯憨审藐毖啡线鸡刷澜塌炽拒拱渠粮恩怔苦物犀槛瘦撞进郁毙退褐獭煽伐厨候兔漱鹤闹杀卞胜羞丛篙肺祟昼柑栈焰揩蔓呼墒装楔毗举难找腾朔蜀毙骏闪浇接岂赖蚤省授稽抠秩骄遍蓝磺椰铲磐味身陛翠萨粥铅痞撮炒阿鹤蠢掐娟蹄虏姚阶强价霜墟煞央盎铱骆支酸超撅父钙沸鸵疯阅及文丝吨紊旬态彻郁共候诱鸥擦参畅扩离痪卒株搽捆甩劳山配此坏咽红幕界哇探肿油肝烯锻讫肇谊柒作末略冒魂罗溅惊磨捆嫩食材踊吟猎罚慑象戳爪涪尚笛娠

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服