本發(fā)明涉及一種跨瀏覽器的插件,尤其涉及跨瀏覽器的標(biāo)準(zhǔn)插件,具體是指一種跨瀏覽器插件的自適應(yīng)方法。
背景技術(shù):
::瀏覽器是指可以顯示網(wǎng)頁(yè)服務(wù)器或者文件系統(tǒng)的html文件(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的一個(gè)應(yīng)用)內(nèi)容,并讓用戶(hù)與這些文件交互的一種軟件。為提高瀏覽器的擴(kuò)展性和易用性,瀏覽器需要提供插件支持用戶(hù)訪(fǎng)問(wèn)互聯(lián)網(wǎng)上豐富的多媒體信息。瀏覽器內(nèi)核分為trident、gecko、webkit、presto。trident(又稱(chēng)為mshtml)是微軟開(kāi)發(fā)的一種排版引擎,其代表產(chǎn)品為internetexplorer,因此又稱(chēng)其為ie內(nèi)核。gecko是一套開(kāi)放源代碼的、以c++編寫(xiě)的網(wǎng)頁(yè)排版引擎,gecko內(nèi)核代表作品mozillafirefox。webkit是一個(gè)開(kāi)源項(xiàng)目,包含了來(lái)自kde項(xiàng)目和蘋(píng)果公司的部分組件,它的特點(diǎn)在于源碼結(jié)構(gòu)清晰、渲染速度極快。缺點(diǎn)是對(duì)網(wǎng)頁(yè)代碼的兼容性不高,導(dǎo)致一些編寫(xiě)不標(biāo)準(zhǔn)的網(wǎng)頁(yè)無(wú)法正常顯示。主要代表作品有safari和google的瀏覽器chrome。presto是由operasoftware開(kāi)發(fā)的瀏覽器排版引擎,支持隨著dom及script語(yǔ)法的事件而對(duì)網(wǎng)頁(yè)重新排版,主要代表作品為opera。瀏覽器插件技術(shù)主要用于擴(kuò)充瀏覽器功能,主要有登記mime類(lèi)型,在瀏覽器串口中開(kāi)設(shè)自己的工作窗口,接受和處理鍵盤(pán)、鼠標(biāo)實(shí)踐,使用url從網(wǎng)絡(luò)獲取、傳送數(shù)據(jù),添加指向新的url熱鍵或熱區(qū),控制html頁(yè)面等。由于瀏覽器內(nèi)核的多樣性,不同的內(nèi)核支持不同標(biāo)準(zhǔn)的插件。因?yàn)椴寮刹煌陌l(fā)行商進(jìn)行插件開(kāi)發(fā)發(fā)行,其技術(shù)水平良莠不齊,插件程序很可能與其它運(yùn)行中的程序發(fā)生沖突,從而導(dǎo)致諸如各種頁(yè)面錯(cuò)誤,運(yùn)行時(shí)間錯(cuò)誤等等現(xiàn)象,阻塞了正常瀏覽,且不同的瀏覽器開(kāi)發(fā)標(biāo)準(zhǔn)不一致,導(dǎo)致瀏覽器插件僅能在特定瀏覽器中運(yùn)行,對(duì)于不同的瀏覽器需要發(fā)布不同的插件,無(wú)法做到插件的統(tǒng)一,同時(shí)在瀏覽器讀取網(wǎng)頁(yè)文件時(shí),當(dāng)網(wǎng)頁(yè)文件存在格式或者其他錯(cuò)誤無(wú)法被當(dāng)前瀏覽器正常識(shí)別最終無(wú)法正常顯示。技術(shù)實(shí)現(xiàn)要素:本發(fā)明提供一種跨瀏覽器插件的自適應(yīng)方法,用于解決現(xiàn)有技術(shù)中存在的:瀏覽器在讀取網(wǎng)頁(yè)文件時(shí),當(dāng)網(wǎng)頁(yè)文件存在格式或者編寫(xiě)錯(cuò)誤而導(dǎo)致瀏覽器在渲染時(shí)無(wú)法正常顯示的問(wèn)題,為了解決上述技術(shù)問(wèn)題,達(dá)到在無(wú)需更換網(wǎng)頁(yè)文件的情況下,對(duì)網(wǎng)頁(yè)文件的錯(cuò)誤進(jìn)行修改并能夠被當(dāng)前瀏覽器正常顯示的技術(shù)效果,本發(fā)明通過(guò)下述技術(shù)方案實(shí)現(xiàn):一種跨瀏覽器插件框架的自適應(yīng)方法,包括標(biāo)準(zhǔn)瀏覽器插件,標(biāo)準(zhǔn)瀏覽器插件對(duì)瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件自適應(yīng),具體包括以下步驟:步驟1.1將所述標(biāo)準(zhǔn)瀏覽器插件載入當(dāng)前瀏覽器;步驟1.2標(biāo)準(zhǔn)瀏覽器插件對(duì)當(dāng)前瀏覽器內(nèi)核進(jìn)行訪(fǎng)問(wèn)并讀取當(dāng)前瀏覽器的信息;步驟1.3標(biāo)準(zhǔn)瀏覽器插件再對(duì)瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件進(jìn)行解析,判斷網(wǎng)頁(yè)文件與當(dāng)前瀏覽器是否兼容;步驟1.4標(biāo)準(zhǔn)瀏覽器插件再根據(jù)當(dāng)前瀏覽器內(nèi)核的類(lèi)型對(duì)解析的網(wǎng)頁(yè)文件進(jìn)行一致性調(diào)整;步驟1.5瀏覽器將調(diào)整后的網(wǎng)頁(yè)文件進(jìn)行渲染顯示。工作流程說(shuō)明:因?yàn)椴寮刹煌陌l(fā)行商進(jìn)行插件開(kāi)發(fā)發(fā)行,其技術(shù)水平良莠不齊,插件程序很可能與其它運(yùn)行中的程序發(fā)生沖突,從而導(dǎo)致諸如各種頁(yè)面錯(cuò)誤,運(yùn)行時(shí)間錯(cuò)誤等等現(xiàn)象,阻塞了正常瀏覽,且不同的瀏覽器開(kāi)發(fā)標(biāo)準(zhǔn)不一致,導(dǎo)致瀏覽器插件僅能在特定瀏覽器中運(yùn)行,對(duì)于不同的瀏覽器需要發(fā)布不同的插件,無(wú)法做到插件的統(tǒng)一,為了能夠做到適應(yīng)各個(gè)瀏覽器內(nèi)型,具體開(kāi)發(fā)的過(guò)程是首先定義統(tǒng)一的標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái),標(biāo)準(zhǔn)的瀏覽器插件是通過(guò)標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)開(kāi)發(fā)而來(lái),首先是在標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)上創(chuàng)建標(biāo)準(zhǔn)瀏覽器插件,最后將標(biāo)準(zhǔn)瀏覽器插件發(fā)送至瀏覽器上,標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)自帶有解析器和類(lèi)加載器的標(biāo)準(zhǔn)框架,所述標(biāo)準(zhǔn)框架內(nèi)設(shè)置有插件結(jié)構(gòu),插件結(jié)構(gòu)包括至少一個(gè)根目錄,在所述根目錄下并列建立有至少四個(gè)子目錄,分別為通用程序集、插件文件、庫(kù)文件、通用配置,其中通用程序集里面放置有標(biāo)準(zhǔn)瀏覽器插件常用的通用程序,通用配置內(nèi)放置有標(biāo)準(zhǔn)瀏覽器插件常用的配置,庫(kù)文件內(nèi)放置有標(biāo)準(zhǔn)瀏覽器插件常用的庫(kù)文件等,子目錄中的插件文件下還設(shè)置有多個(gè)插件功能模塊,在每一個(gè)的功能模塊中都含有4個(gè)單元,分別是程序集、腳本文件、網(wǎng)頁(yè)文件、庫(kù)文件,程序集的作用是定義插件的屬性,例如名稱(chēng)、版本、類(lèi)型等信息,網(wǎng)頁(yè)文件是具體實(shí)現(xiàn)插件的功能,庫(kù)文件是跟瀏覽器互動(dòng)的腳本文件,用戶(hù)可以在這個(gè)4個(gè)單元內(nèi)編寫(xiě)相應(yīng)程序代碼,具體是指的在網(wǎng)頁(yè)文件下進(jìn)行編寫(xiě),從而形成相應(yīng)的插件功能,標(biāo)準(zhǔn)框架的類(lèi)加載器根據(jù)通用配置對(duì)插件文件、通用程序集和庫(kù)文件進(jìn)行加載、調(diào)用、組合成相應(yīng)的標(biāo)準(zhǔn)瀏覽器插件。標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)內(nèi)還能夠?qū)?biāo)準(zhǔn)瀏覽器插件進(jìn)行試運(yùn)行,在試運(yùn)行過(guò)程中還存在報(bào)警提示,標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)上開(kāi)發(fā)出的標(biāo)準(zhǔn)瀏覽器插件根據(jù)虛擬的網(wǎng)絡(luò)環(huán)境模擬標(biāo)準(zhǔn)瀏覽器插件在運(yùn)行時(shí)會(huì)出現(xiàn)的問(wèn)題,比如網(wǎng)頁(yè)無(wú)法正常顯示,圖片無(wú)法正常打開(kāi),此時(shí)會(huì)有提示信息,對(duì)提示信息進(jìn)行處理,將標(biāo)準(zhǔn)瀏覽器插件反應(yīng)至相應(yīng)的插件結(jié)構(gòu)的具體位置中,在相應(yīng)的位置對(duì)標(biāo)準(zhǔn)瀏覽器插件的網(wǎng)頁(yè)文件進(jìn)行修改,已達(dá)到適應(yīng)各種不同瀏覽器內(nèi)核的需求。對(duì)已經(jīng)試運(yùn)行成功或者是返回修改后的再試運(yùn)行成功的標(biāo)準(zhǔn)瀏覽器插件進(jìn)行組織、打包并發(fā)送至瀏覽器,此過(guò)程便是將標(biāo)準(zhǔn)瀏覽器插件載入當(dāng)前瀏覽器中的具體過(guò)程。開(kāi)發(fā)標(biāo)準(zhǔn)瀏覽器插件有利于統(tǒng)一,在需要開(kāi)發(fā)插件時(shí),在標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)的插件結(jié)構(gòu)下編寫(xiě)相應(yīng)程序,進(jìn)而組裝,形成具有相應(yīng)功能的插件,能夠減少人力資源的浪費(fèi),同時(shí)對(duì)不同瀏覽器的類(lèi)型也能夠完全適應(yīng)。標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)上開(kāi)發(fā)出的標(biāo)準(zhǔn)瀏覽器插也能夠在此進(jìn)行試運(yùn)行,運(yùn)行成功便進(jìn)入下一步存儲(chǔ)瀏覽器上,訪(fǎng)問(wèn)等,當(dāng)是試運(yùn)行不成功,標(biāo)準(zhǔn)瀏覽器插件將會(huì)被返回插件結(jié)構(gòu),進(jìn)行錯(cuò)誤的修改,已達(dá)到所需的要求。標(biāo)準(zhǔn)瀏覽器插件能夠?qū)Ξ?dāng)前瀏覽器內(nèi)核進(jìn)行訪(fǎng)問(wèn)讀取當(dāng)前瀏覽器的信息,值得說(shuō)明的是,訪(fǎng)問(wèn)過(guò)程以及讀取信息的過(guò)程是本領(lǐng)域公知的常識(shí),故在此不在進(jìn)行過(guò)多的闡述。當(dāng)前瀏覽器的渲染引擎在窗口上顯示請(qǐng)求到的內(nèi)容,該內(nèi)容是瀏覽器能夠讀取網(wǎng)站的網(wǎng)頁(yè)文件,通常情況下,渲染引擎可以顯示html、xml等文檔及圖片,但是對(duì)于特殊文件則無(wú)法正常渲染,而標(biāo)準(zhǔn)瀏覽器插件則可以對(duì)特殊文件進(jìn)行渲染,然后在瀏覽器窗口上顯示,特殊的文件比如是pdf文件、ceb文件、flashplayer等等特殊類(lèi)型的文件。對(duì)于無(wú)法正常顯示的特殊文件,此時(shí)標(biāo)準(zhǔn)瀏覽器插件便能夠?qū)W(wǎng)頁(yè)文件進(jìn)行解析,通過(guò)解析達(dá)到能夠使得當(dāng)前瀏覽器正常識(shí)別的網(wǎng)頁(yè)文件,并在對(duì)相應(yīng)的網(wǎng)頁(yè)文件進(jìn)行一致性的調(diào)整,從而使得當(dāng)前瀏覽器能夠正常的渲染顯示。為了更好實(shí)現(xiàn)標(biāo)準(zhǔn)瀏覽器插件在對(duì)網(wǎng)頁(yè)文件進(jìn)行解析,并達(dá)到解析完整性,進(jìn)一步地限定,所述步驟1.3中標(biāo)準(zhǔn)瀏覽器插件再對(duì)瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件進(jìn)行解析的具體步驟為:步驟1.3.1:標(biāo)準(zhǔn)瀏覽器插件將網(wǎng)頁(yè)文件的源文件進(jìn)行文法分析;步驟1.3.2:標(biāo)準(zhǔn)瀏覽器插件對(duì)網(wǎng)頁(yè)文件的源文件搭建解析樹(shù);步驟1.3.3:標(biāo)準(zhǔn)瀏覽器插件根據(jù)當(dāng)前瀏覽器內(nèi)核的類(lèi)型將解析樹(shù)進(jìn)行轉(zhuǎn)換為能夠被當(dāng)前瀏覽器識(shí)別的文檔。標(biāo)準(zhǔn)瀏覽器插件在對(duì)網(wǎng)頁(yè)文件進(jìn)行解析的具體過(guò)程,解析網(wǎng)頁(yè)文件是將文件轉(zhuǎn)化為有意義的結(jié)構(gòu),即是能夠讓代碼被理解和使用的結(jié)構(gòu),網(wǎng)頁(yè)文件通常是一種代碼格式,標(biāo)準(zhǔn)瀏覽器插件先對(duì)網(wǎng)頁(yè)文件的代碼進(jìn)行文法分析,代碼格式都有一定的文法規(guī)則,文法是指基于文檔依據(jù)的語(yǔ)法規(guī)則,即文檔的語(yǔ)言或者是格式,每種可被解析的文件的格式必須具有詞匯以及語(yǔ)法規(guī)則組成的特定的文法。標(biāo)準(zhǔn)瀏覽器插件內(nèi)含有解析器,解析器一般分為語(yǔ)法分析器和詞法分析器,值得說(shuō)明的是語(yǔ)法分析器和詞法分析器是本領(lǐng)域內(nèi)公知的,故在此不在進(jìn)行過(guò)多的闡述,詞法分析器主要是詞法分析,是將輸入分解為符號(hào),符號(hào)是語(yǔ)言的詞匯表,相當(dāng)于我們熟悉的字典中的單詞,語(yǔ)法分析器主要是對(duì)語(yǔ)法進(jìn)行分析,語(yǔ)法分析是指對(duì)語(yǔ)言應(yīng)用語(yǔ)法的規(guī)則,解析器一般分兩個(gè)部分工作,詞法分析器負(fù)責(zé)將輸入分解為合法的符號(hào),語(yǔ)法分析器則根據(jù)語(yǔ)言的語(yǔ)法規(guī)則分析出文檔,解析樹(shù)根據(jù)上述的詞法分析和語(yǔ)法分析最后將文檔構(gòu)建為解析樹(shù)。得到的解析樹(shù)并不是最終的結(jié)構(gòu),解析器需要將解析樹(shù)轉(zhuǎn)換為能夠?yàn)楫?dāng)前瀏覽器內(nèi)核識(shí)別的文檔。該過(guò)程更加具體的描述了解析的過(guò)程,使得本發(fā)明的方案更加完善,通過(guò)對(duì)網(wǎng)頁(yè)文件的解析,并將無(wú)法渲染的網(wǎng)頁(yè)文件進(jìn)行轉(zhuǎn)換能夠被當(dāng)前瀏覽器識(shí)別的文件。對(duì)于轉(zhuǎn)換位能夠識(shí)別的文檔,因?yàn)殚_(kāi)發(fā)者的開(kāi)發(fā)水平參差不齊,存在較多的人為錯(cuò)誤,為了更好的實(shí)現(xiàn)本發(fā)明,進(jìn)一步地限定,所述步驟1.4中再根據(jù)當(dāng)前瀏覽器內(nèi)核的類(lèi)型對(duì)解析的網(wǎng)頁(yè)文件進(jìn)行一致性調(diào)整,具體一致性調(diào)整的步驟為:步驟1.4.1:對(duì)文檔進(jìn)行符號(hào)的識(shí)別并傳遞至構(gòu)建器;步驟1.4.2:構(gòu)建器將接收到的符號(hào)重新構(gòu)建能夠適應(yīng)當(dāng)前瀏覽器內(nèi)核的構(gòu)建樹(shù);步驟1.4.3:構(gòu)建器根據(jù)當(dāng)前瀏覽器內(nèi)核對(duì)重新建立的構(gòu)建樹(shù)進(jìn)行符號(hào)的修改;步驟1.4.4:將修改后的構(gòu)建樹(shù)轉(zhuǎn)換為網(wǎng)頁(yè)文件。通過(guò)解析器對(duì)文檔的符號(hào)進(jìn)行識(shí)別,符號(hào)識(shí)別是指根據(jù)符號(hào)識(shí)別的算法,將輸入解析變?yōu)榉?hào),并將其傳遞給樹(shù)構(gòu)建器,并讀取下一個(gè)字符,以識(shí)別下一個(gè)符號(hào),直至處理完所有輸入,符號(hào)識(shí)別主要是對(duì)開(kāi)始標(biāo)簽、結(jié)束標(biāo)簽、屬性名以及屬性值進(jìn)行識(shí)別。將構(gòu)建樹(shù)構(gòu)建階段,將元素附加到樹(shù)上,每個(gè)由符號(hào)識(shí)別器識(shí)別生成的節(jié)點(diǎn)將會(huì)被構(gòu)建樹(shù)進(jìn)行處理。構(gòu)建器根據(jù)當(dāng)前瀏覽器內(nèi)核重新建立構(gòu)建樹(shù)在構(gòu)建過(guò)程中還會(huì)對(duì)符號(hào)進(jìn)行修改,已到達(dá)能夠正常渲染的效果。為了更加具體的實(shí)現(xiàn)本發(fā)明,以及實(shí)現(xiàn)更好的自適應(yīng),進(jìn)一步地限定,所述步驟1.4.3中構(gòu)建器對(duì)重新建立的構(gòu)建樹(shù)進(jìn)行修改包括對(duì)網(wǎng)頁(yè)文件中源文件的錯(cuò)誤或不規(guī)范編寫(xiě)進(jìn)行修復(fù)。對(duì)網(wǎng)頁(yè)文件中存在的錯(cuò)誤進(jìn)行修改,主要是修改不規(guī)范的書(shū)寫(xiě)方法,以及多余符號(hào),達(dá)成能夠正常渲染的效果。為了更加具體的實(shí)現(xiàn)本發(fā)明,進(jìn)一步地限定,所述修復(fù)為增加或者是減少源文件的符號(hào)。為了節(jié)約程序,節(jié)約時(shí)間,在對(duì)網(wǎng)頁(yè)文件進(jìn)行修改后,進(jìn)一步地限定,在所述步驟1.4.3和步驟1.4.4之間還包括有對(duì)修改后的網(wǎng)頁(yè)文件進(jìn)行試運(yùn)行。試運(yùn)行成功便能夠正常的渲染,如果不成功,將會(huì)進(jìn)一步返回修改直至到修改成功為止。為了使在操作過(guò)程中,使本發(fā)明更加完善,進(jìn)一步地限定,在所述試運(yùn)行過(guò)程中還設(shè)置有報(bào)警提示。在試運(yùn)行過(guò)程中當(dāng)出現(xiàn)不成功的時(shí)候,馬上提示報(bào)警,并顯示出報(bào)警的信息,便能夠更快更準(zhǔn)的對(duì)網(wǎng)頁(yè)文件進(jìn)行修改。本發(fā)明與現(xiàn)有技術(shù)相比,具有以下優(yōu)點(diǎn)及有益效果:(1)本發(fā)明通過(guò)標(biāo)準(zhǔn)瀏覽器插件對(duì)網(wǎng)頁(yè)文件的解析以及一致性的調(diào)整,使得網(wǎng)頁(yè)文件能夠正常被渲染出來(lái),有利于節(jié)約成本,不影響客戶(hù)的操作;(2)本發(fā)明通過(guò)對(duì)網(wǎng)頁(yè)文件的一致性調(diào)整,尤其是對(duì)特殊的文件,比如是pdf等文件,使得本產(chǎn)品的通用性更強(qiáng),使用范圍更廣;(3)本發(fā)明通過(guò)在一致性調(diào)整后再進(jìn)行試運(yùn)行,能夠減少錯(cuò)誤,提高使用的效率;(4)本發(fā)明通過(guò)在試運(yùn)行中設(shè)置報(bào)警提示,報(bào)警提示能夠?qū)﹀e(cuò)誤信息經(jīng)常報(bào)警處理,及時(shí)處理相應(yīng)的錯(cuò)誤,節(jié)約時(shí)間。附圖說(shuō)明通過(guò)閱讀參照以下附圖對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其他特征、目的和優(yōu)點(diǎn)將會(huì)變得更為明顯:圖1為本發(fā)明跨瀏覽器插件自適應(yīng)方法的流程圖;圖2為本發(fā)明跨瀏覽器插件對(duì)網(wǎng)頁(yè)文件解析的流程圖;圖3為本發(fā)明跨瀏覽器插件對(duì)網(wǎng)頁(yè)文件解析后一致性調(diào)整的流程圖;圖4為本發(fā)明標(biāo)準(zhǔn)瀏覽器插件流程圖;圖5為本發(fā)明標(biāo)準(zhǔn)瀏覽器插件的插件框架結(jié)構(gòu)示意圖;圖6為本發(fā)明瀏覽器組件圖。具體實(shí)施方式下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終相同或類(lèi)似的標(biāo)號(hào)表示相同或類(lèi)似的元件或具有相同或類(lèi)似功能的元件。下面通過(guò)參考附圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對(duì)本發(fā)明的限制。實(shí)施例1:本實(shí)施例的主要流程,如圖1至圖6所示:1.一種跨瀏覽器插件的自適應(yīng)方法,包括標(biāo)準(zhǔn)瀏覽器插件,標(biāo)準(zhǔn)瀏覽器插件對(duì)瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件自適應(yīng),具體包括以下步驟:步驟1.1將所述標(biāo)準(zhǔn)瀏覽器插件載入當(dāng)前瀏覽器;步驟1.2標(biāo)準(zhǔn)瀏覽器插件對(duì)當(dāng)前瀏覽器內(nèi)核進(jìn)行訪(fǎng)問(wèn)并讀取當(dāng)前瀏覽器的信息;步驟1.3標(biāo)準(zhǔn)瀏覽器插件再對(duì)瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件進(jìn)行解析,判斷網(wǎng)頁(yè)文件與當(dāng)前瀏覽器是否兼容;步驟1.4標(biāo)準(zhǔn)瀏覽器插件再根據(jù)當(dāng)前瀏覽器內(nèi)核的類(lèi)型對(duì)解析的網(wǎng)頁(yè)文件進(jìn)行一致性調(diào)整;步驟1.5瀏覽器將調(diào)整后的網(wǎng)頁(yè)文件進(jìn)行渲染顯示。具體的實(shí)施方式:對(duì)于基于不同渲染引擎開(kāi)發(fā)的網(wǎng)頁(yè)工程,其格式及語(yǔ)法是不一樣的,且很多網(wǎng)站不按照w3c標(biāo)準(zhǔn)進(jìn)行設(shè)計(jì)和研發(fā),導(dǎo)致渲染引擎和標(biāo)準(zhǔn)瀏覽器插件對(duì)網(wǎng)頁(yè)文件進(jìn)行解析時(shí),無(wú)法正常顯示。對(duì)于這種情況,需要對(duì)解析后的網(wǎng)頁(yè)文件進(jìn)行調(diào)整,將解析后的網(wǎng)頁(yè)文件進(jìn)行格式完善和調(diào)整,實(shí)現(xiàn)標(biāo)準(zhǔn)瀏覽器插件的自適應(yīng)。標(biāo)準(zhǔn)瀏覽器插件是根據(jù)標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)開(kāi)發(fā)而來(lái),首先需要先定義標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái),在標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)上設(shè)置出標(biāo)準(zhǔn)瀏覽器插件,標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)帶有解析器和類(lèi)加載器,標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)的標(biāo)準(zhǔn)框架內(nèi)設(shè)置插件結(jié)構(gòu),插件結(jié)構(gòu)是包括至少一個(gè)根目錄,在根目錄下并列建立有通用程序集、插件文件、庫(kù)文件、通用配置的子目錄,其中通用程序集文件中僅存有常用的程序集,通用配置為插件的基本配置,庫(kù)文件為常用的庫(kù)文件。每個(gè)子目錄之間具有物理隔離性,在插件文件下按照功能的不同設(shè)置不同的插件功能模塊,并且各插件功能模塊之間同時(shí)也具有物理隔離性,設(shè)置該插件結(jié)構(gòu),并把插件相應(yīng)的功能進(jìn)行分類(lèi),每一個(gè)插件功能模塊為一個(gè)功能,該插件功能模塊內(nèi)有實(shí)現(xiàn)該功能需要的程序集、腳本文件、頁(yè)面文件圖片等全部文件,在此插件功能模塊下編寫(xiě)相應(yīng)的程序,便能夠?qū)崿F(xiàn)相應(yīng)的功能。插件功能模塊是根據(jù)插件的基本架構(gòu)模式由此而來(lái),一般一個(gè)完整的插件是由4個(gè)部分組成,分別是程序集、腳本文件、庫(kù)文件和網(wǎng)頁(yè)文件,通常庫(kù)文件的作用是定義插件的屬性,例如名稱(chēng)、版本、類(lèi)型等;而網(wǎng)頁(yè)文件頁(yè)面內(nèi)可以包含圖片、鏈接,甚至音樂(lè)、程序等非文字元素,是具體實(shí)現(xiàn)插件的功能,用戶(hù)可以根據(jù)需求,在網(wǎng)頁(yè)文件下編寫(xiě),以及將插件的目錄按照開(kāi)發(fā)標(biāo)準(zhǔn)平臺(tái)的目錄進(jìn)行組織存放。開(kāi)發(fā)出標(biāo)準(zhǔn)瀏覽器插件后,每一個(gè)功能都將被封裝在插件功能模塊中,插件功能模塊內(nèi)存放有更多的源文件目錄,每一個(gè)標(biāo)準(zhǔn)瀏覽器插件都是具有相應(yīng)的功能以及相應(yīng)的界面,業(yè)務(wù)邏輯和數(shù)據(jù)等代碼組成,由于每個(gè)插件功能模塊之間也具有物理隔離性,開(kāi)發(fā)者可以開(kāi)發(fā)自己的功能,類(lèi)加載器對(duì)這些代碼進(jìn)行解析,并在這上面進(jìn)行獨(dú)立測(cè)試、部署以及升級(jí),一旦開(kāi)發(fā)完成后,便在開(kāi)發(fā)標(biāo)準(zhǔn)平臺(tái)上進(jìn)行由類(lèi)加載器進(jìn)行組合。標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)上類(lèi)加載器對(duì)標(biāo)準(zhǔn)瀏覽器插件進(jìn)行解析、運(yùn)行,按照標(biāo)準(zhǔn)開(kāi)發(fā)平臺(tái)的標(biāo)準(zhǔn)框架,標(biāo)準(zhǔn)框架內(nèi)有較多的插件模塊。標(biāo)準(zhǔn)瀏覽器插件開(kāi)發(fā)完成將需要進(jìn)行試運(yùn)行,試運(yùn)行成功后將打包發(fā)送至瀏覽器。標(biāo)準(zhǔn)瀏覽器插件先對(duì)當(dāng)前瀏覽器類(lèi)型進(jìn)行訪(fǎng)問(wèn)并讀取相應(yīng)的信息,當(dāng)前瀏覽器讀取網(wǎng)站的網(wǎng)頁(yè)文件無(wú)法顯示時(shí)候,則標(biāo)準(zhǔn)瀏覽器插件對(duì)網(wǎng)頁(yè)進(jìn)行解析以及一致性的標(biāo)準(zhǔn),具體解析和調(diào)整以下舉例說(shuō)明,以網(wǎng)頁(yè)文件為html的格式進(jìn)行說(shuō)明,對(duì)于客戶(hù)端html文件,標(biāo)準(zhǔn)瀏覽器插件在獲取到該文件時(shí),需要對(duì)文件進(jìn)行一致性調(diào)整。具體解析的過(guò)程為:解析分為語(yǔ)法分析和詞法分析兩個(gè)子過(guò)程,語(yǔ)法分析是將輸入分解為符合,符號(hào)是語(yǔ)言的詞匯表,語(yǔ)法分析是指對(duì)語(yǔ)言應(yīng)用的法則,詞法分析負(fù)責(zé)將輸入分解為合法的符號(hào),根據(jù)語(yǔ)言的語(yǔ)法規(guī)則分析html的文檔結(jié)構(gòu),從而構(gòu)建解析樹(shù)。得到解析樹(shù)后,標(biāo)準(zhǔn)瀏覽器插件對(duì)解析樹(shù)進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換為能夠被當(dāng)前瀏覽器識(shí)別的網(wǎng)頁(yè)文檔,及時(shí)轉(zhuǎn)變?yōu)榱四軌蜃R(shí)別的網(wǎng)頁(yè)文檔,但是存在網(wǎng)頁(yè)文檔編寫(xiě)錯(cuò)誤或者格式錯(cuò)誤可能性,還需要對(duì)網(wǎng)頁(yè)文檔進(jìn)行一致性的調(diào)整,具體一致性調(diào)整的過(guò)程為:1)符號(hào)識(shí)別html的符號(hào)包括開(kāi)始標(biāo)簽、結(jié)束標(biāo)簽、屬性名及屬性值。符號(hào)識(shí)別是指根據(jù)符號(hào)識(shí)別算法,將輸入解析為符號(hào),并將其傳遞給樹(shù)構(gòu)建器,并讀取下一個(gè)字符,以識(shí)別下一個(gè)符號(hào),直至處理完所有輸入。符號(hào)識(shí)別算法相對(duì)較為復(fù)雜,用html頁(yè)面來(lái)解釋這個(gè)原理:<html><body>helloworld</body></html>初始狀態(tài)為“datastate”,當(dāng)遇到“<”字符,狀態(tài)變?yōu)椤皌agopenstate”,讀取一個(gè)a-z的字符將產(chǎn)生一個(gè)開(kāi)始標(biāo)簽符號(hào),狀態(tài)相應(yīng)變?yōu)椤皌agnamestate”,一直保持這個(gè)狀態(tài)直到讀取到“>”,每個(gè)字符都附加到這個(gè)符號(hào)名上,例子中創(chuàng)建的是一個(gè)html符號(hào)。當(dāng)讀取到“>”,當(dāng)前的符號(hào)就完成了,此時(shí),狀態(tài)回到“datastate”,“<body>”重復(fù)這一處理過(guò)程。到這里,html和body標(biāo)簽都識(shí)別出來(lái)了?,F(xiàn)在,回到“datastate”,讀取“helloworld”中的字符“h”將創(chuàng)建并識(shí)別出一個(gè)字符符號(hào),這里會(huì)為“helloworld”中的每個(gè)字符生成一個(gè)字符符號(hào)。這樣直到遇到“</body>”中的“<”?,F(xiàn)在,又回到了“tagopenstate”,讀取下一個(gè)字符“/”將創(chuàng)建一個(gè)閉合標(biāo)簽符號(hào),并且狀態(tài)轉(zhuǎn)移到“tagnamestate”,還是保持這一狀態(tài),直到遇到“>”。然后,產(chǎn)生一個(gè)新的標(biāo)簽符號(hào)并回到“datastate”。后面的“</html>”將和“</body>”一樣處理。2)重新搭建構(gòu)建樹(shù)在樹(shù)的構(gòu)建階段,將修改以document為根的dom樹(shù),將元素附加到樹(shù)上,每個(gè)由符號(hào)識(shí)別器識(shí)別生成的節(jié)點(diǎn)將會(huì)被樹(shù)構(gòu)造器進(jìn)行處理,規(guī)范中定義了每個(gè)符號(hào)相對(duì)應(yīng)的dom元素,對(duì)應(yīng)的dom元素將會(huì)被創(chuàng)建。這些元素除了會(huì)被添加到dom樹(shù)上,還將被添加到開(kāi)放元素堆棧中。這個(gè)堆棧用來(lái)糾正嵌套的未匹配和未閉合標(biāo)簽,這個(gè)算法也是用狀態(tài)機(jī)來(lái)描述,所有的狀態(tài)采用插入模式。繼續(xù)闡述構(gòu)建樹(shù)的原理:此階段將符號(hào)識(shí)別階段生成的符號(hào)序列作為輸入,然后開(kāi)始構(gòu)建。首先是“initialmode”,接收到html符號(hào)后將轉(zhuǎn)換為“beforehtml”模式,在這個(gè)模式中對(duì)這個(gè)符號(hào)進(jìn)行再處理。此時(shí),創(chuàng)建了一個(gè)htmlhtmlelement元素,并將其附加到根document對(duì)象上。狀態(tài)此時(shí)變?yōu)椤癰eforehead”,接收到body符號(hào)時(shí),即使這里沒(méi)有head符號(hào),也將自動(dòng)創(chuàng)建一個(gè)htmlheadelement元素并附加到樹(shù)上?,F(xiàn)在,轉(zhuǎn)到“inhead”模式,然后是“afterhead”。到這里,body符號(hào)會(huì)被再次處理,將創(chuàng)建一個(gè)htmlbodyelement并插入到樹(shù)中,同時(shí),轉(zhuǎn)移到“inbody”模式。然后,接收到字符串“helloworld”的字符符號(hào),第一個(gè)字符將導(dǎo)致創(chuàng)建并插入一個(gè)text節(jié)點(diǎn),其他字符將附加到該節(jié)點(diǎn)。接收到body結(jié)束符號(hào)時(shí),轉(zhuǎn)移到“afterbody”模式,接著接收到html結(jié)束符號(hào),這個(gè)符號(hào)意味著轉(zhuǎn)移到了“afterafterbody”模式,當(dāng)接收到文件結(jié)束符時(shí),整個(gè)解析過(guò)程結(jié)束。3)自適應(yīng)調(diào)整由于某些html頁(yè)面是按照gecko的標(biāo)準(zhǔn)來(lái)編寫(xiě),而某些windows用戶(hù)則是按照trident的標(biāo)準(zhǔn)來(lái)編寫(xiě),還有一些則是按照webkit的標(biāo)準(zhǔn)來(lái)編寫(xiě),不同渲染引擎之間識(shí)別符號(hào)的格式不一致,插件自適應(yīng)根據(jù)當(dāng)前瀏覽器的內(nèi)核對(duì)輸入文件進(jìn)行分析,自動(dòng)修改和完善元素,使文件可以正常顯示。例如:<table><table><tr><td>innertable</td></tr></table><tr><td>outertable</td></tr></table>當(dāng)前瀏覽器內(nèi)核為webkit,通過(guò)自適應(yīng)插件對(duì)輸入文件進(jìn)行分析和處理后可正常渲染。如果沒(méi)有自適應(yīng)插件,webkit則會(huì)將嵌套的表格變?yōu)閮蓚€(gè)兄弟表格:<table><tr><td>outertable</td></tr></table><table><tr><td>innertable</td></tr></table>另一方面,對(duì)于某些編寫(xiě)不規(guī)范、錯(cuò)誤的html頁(yè)面,自適應(yīng)插件可自動(dòng)對(duì)標(biāo)簽和元素進(jìn)行修復(fù)。當(dāng)對(duì)于客戶(hù)端為css文件,自適應(yīng)插件在獲取到該文件時(shí),需要對(duì)文件進(jìn)行一致性調(diào)整。具體設(shè)置有:不同于html,css屬于上下文無(wú)關(guān)文法,可以用類(lèi)似bnf的格式來(lái)定義。一個(gè)規(guī)則集合具有一個(gè)或是可選個(gè)數(shù)的多個(gè)選擇器,這些選擇器以逗號(hào)和空格(s表示空格)進(jìn)行分隔。每個(gè)規(guī)則集合包含大括號(hào)及大括號(hào)中的一條或多條以分號(hào)隔開(kāi)的聲明。聲明和選擇器在后面進(jìn)行定義。例如對(duì)于webkit內(nèi)核的瀏覽器使用flex和bison解析生成器從css語(yǔ)法文件中自動(dòng)生成解析器。bison創(chuàng)建一個(gè)自底向上的解析器,firefox使用自頂向下解析器。它們都是將每個(gè)css文件解析為樣式表對(duì)象,每個(gè)對(duì)象包含css規(guī)則,css規(guī)則對(duì)象包含選擇器和聲明對(duì)象,以及其他一些符合css語(yǔ)法的對(duì)象。自適應(yīng)插件根據(jù)解析器生成的不同結(jié)果進(jìn)行調(diào)整,實(shí)現(xiàn)css的自適應(yīng)。在對(duì)網(wǎng)頁(yè)文件進(jìn)行自適應(yīng)調(diào)整后進(jìn)行試運(yùn)行,該試運(yùn)行有利于檢查錯(cuò)誤,便于修改,同時(shí)試運(yùn)行時(shí)還設(shè)置有報(bào)警提示,在遇到問(wèn)題時(shí),即使提示更加高效??梢岳斫獾氖牵鶕?jù)本發(fā)明一個(gè)實(shí)施例的解析器的結(jié)構(gòu),例如詞法分析器和語(yǔ)法分析器等部件的工作原理和工作過(guò)程都是現(xiàn)有技術(shù),且為本領(lǐng)域的技術(shù)人員所熟知,這里就不再進(jìn)行詳細(xì)描述。盡管已經(jīng)示出和描述了本發(fā)明的實(shí)施例,本領(lǐng)域的普通技術(shù)人員可以理解:在不脫離本發(fā)明的原理和宗旨下可以對(duì)這些實(shí)施例進(jìn)行多種變化、修改、替換和變型,本發(fā)明的范圍由權(quán)利要求及其等同物限定。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12