摘要:用戶體驗的需求,完美地保留了瀑布流模態(tài)框的閱讀模式。不支持的話,就不攔截瀑布流文塊的,也就是直接讓其跳轉(zhuǎn)。
背景
想當年,我做了一個新媒體網(wǎng)站項目(AIISPO,已下線)。跟普通資訊網(wǎng)站不一樣的是,老板要求PC端前臺的文章閱讀模式一定得是瀑布流+模態(tài)框。瀑布流指的是以瀑布流的形式將文章羅列出來,而模態(tài)框則指的是點擊瀑布流中代表文章的某個文塊時,直接在當前頁面彈出模態(tài)框來顯示文章正文。
瀑布流式的文章列表 利用模態(tài)框直接顯示文章正文點擊瀑布流的某個文塊后,直接在當前頁面彈出模態(tài)框來顯示正文以及文章相關(guān)內(nèi)容,可依稀透過模態(tài)框背景看到底層的瀑布流。點擊模態(tài)框背景可關(guān)閉模態(tài)框,相當于回到瀑布流。
其時,我正癡迷于MVVM框架avalon,于是,理所當然地用avalon來渲染瀑布流的DOM樹。至于文章正文嘛,就用avalon給瀑布流中的各文塊綁定個click事件,順便把文章id給傳到click事件的callback里,執(zhí)行callback時就ajax讀一下文章正文,最后放到模態(tài)框里顯示就是了。
至此,老板要的“用戶體驗”就達成了,老板夸我厲害還給我漲工資,我心里美美噠 n(≧▽≦)n
官網(wǎng)上線了幾天,老板給我提出了一個非?!皩嶋H”的問題,他沒法把文章的網(wǎng)址分享出去呀,這是因為:官網(wǎng)本來就沒有獨立的文章頁面,更勿論文章的網(wǎng)址了!。當務(wù)之急是創(chuàng)建出可供分享的文章網(wǎng)址。
Hashbang登場老板不接受“跳轉(zhuǎn)新頁面”打開文章正文的方案,堅持一定要瀑布流+模態(tài)框,我只好琢磨別的思路了。首先我試用window.location.href="/article/1",這是一定會使瀏覽器跳轉(zhuǎn)而無法保持在當前頁面的,pass。接下來我查資料就搜到這Hashbang的方案:利用改變錨點#不會導(dǎo)致頁面跳轉(zhuǎn)這一特點,并加上!這一獨特的標識,形成形如http://aiispo.cn/#!/article/1的網(wǎng)址。
具體的方案是這樣的:
大體上跟最初的方案一致。
不一樣的地方在于,打開模態(tài)框的同時window.location.href="/#!/article/1",這時地址欄的地址便變?yōu)?b>http://aiispo.cn/#!/article/1,也能保持不跳轉(zhuǎn)。
另外,給document.load綁上callback,也就是在頁面加載好后取當前的hash(window.location.hash),會得到形如#!/article/1的字符串。正則匹配該字符串把文章ID取出,就可以直接顯示文章正文了。
在關(guān)閉模態(tài)框時,應(yīng)把地址欄恢復(fù)回來。
如此一來,用戶在閱讀文章時地址欄里的正是文章的“網(wǎng)址”,而當用戶把網(wǎng)址分享給別人,別人復(fù)制到瀏覽器一打開,就能看到那篇文章了。老板又夸我了,我心里又美美噠 n(≧▽≦)n
問題再現(xiàn)官網(wǎng)上線月余,百度僅收錄了首頁,我打開首頁的快照一看,可只有avalon的模板標簽,我一下子就醒悟過來了:百度根本就沒能爬到任何的文章,因為首頁根本沒有任何文章的鏈接!
這時候我才意識到在SEO方面出了大問題了,這對一個新媒體網(wǎng)站來說可是致命的呀,把問題報告老板后就趕緊開動腦筋想解決方案了。
把心一橫,把原本用avalon渲染的瀑布流,全部改回用PHP來渲染,同時給瀑布流的文塊加上標簽,例如。由于加上了標簽,地址欄就不需要手動去改了。
問題未解又過了幾天,各個搜索引擎還是沒有動靜,我便又開始查資料:原來,國內(nèi)的搜索引擎在抓取頁面的時候,是不執(zhí)行js的。換句話說,搜索引擎從http://aiispo.cn/#!/article/1這樣的網(wǎng)址進去,只能看到瀑布流而看不到文章正文,因為文章正文是后面用js渲染的,不執(zhí)行js就沒法渲染,而瀑布流是用PHP渲染成html的,搜索引擎能看得到。據(jù)說Google是會執(zhí)行js的,不過作為一個國內(nèi)的網(wǎng)站,還是得優(yōu)先保證國內(nèi)的搜索引擎。
上Html5 History Api思量良久,問題還是出在文章沒有獨立的頁面上,另外Hashbang這種URL也不可靠,無法被后端識別。痛定思痛,這次一定要徹底解決問題。
改造如下:
仿照模態(tài)框的UI,我給做了文章的獨立頁面,URL形如http://aiispo.cn/article/1。
Hashbang不成,我就找其它能修改地址欄但不跳轉(zhuǎn)的方案,結(jié)果就找到了Html5 History Api:
改這href會導(dǎo)致用戶點擊后跳轉(zhuǎn),因此需要用js攔截不讓其跳轉(zhuǎn),并改為用window.history.pushState()來設(shè)置地址欄,此時用戶的地址欄應(yīng)為http://aiispo.cn/article/1。
$("#article-list a").on("click", function() { var url = $(this).attr("href"); window.history.pushState(null, null, url); return false; });
照樣用正則匹配出文章ID,并用模態(tài)框顯示文章正文。
如此一來,便兼顧了三方的需求:
SEO的需求,搜索引擎抓取瀑布流能抓到文章獨立頁面的URL(形如http://aiispo.cn/article/1),通過此URL進入文章獨立頁面能抓取到文章正文。
用戶體驗的需求,完美地保留了瀑布流+模態(tài)框的閱讀模式。
用戶分享文章網(wǎng)址的需求,用戶在瀑布流打開文章時,地址欄正是文章獨立頁面的URL。
兼容性修正上述方案依賴于Html5 History Api,而IE9及以下版本都是不支持Html5 History Api的,需要進行兼容性修正。
在權(quán)衡利弊后,最終決定放棄IE9-用戶的用戶體驗:
檢測當前瀏覽器是否支持Html5 History Api。
不支持的話,就不攔截瀑布流文塊的,也就是直接讓其跳轉(zhuǎn)。
總結(jié)我的這套方案,本質(zhì)上跟Prerender沒有區(qū)別,都是讓后端模擬前端渲染的方式生成一個獨立的頁面供搜索引擎抓取,既兼顧用戶體驗,又不失SEO。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/78286.html
摘要:用戶體驗的需求,完美地保留了瀑布流模態(tài)框的閱讀模式。不支持的話,就不攔截瀑布流文塊的,也就是直接讓其跳轉(zhuǎn)。 背景 想當年,我做了一個新媒體網(wǎng)站項目(AIISPO,已下線)。跟普通資訊網(wǎng)站不一樣的是,老板要求PC端前臺的文章閱讀模式一定得是瀑布流+模態(tài)框。瀑布流指的是以瀑布流的形式將文章羅列出來,而模態(tài)框則指的是點擊瀑布流中代表文章的某個文塊時,直接在當前頁面彈出模態(tài)框來顯示文章正文。 ...
摘要:可以在各個頁面間傳遞數(shù)據(jù),不依賴??梢赃x擇性的保留狀態(tài),如音樂網(wǎng)站,切換頁面時不會停止播放歌曲。減少了請求體積,節(jié)省流量,加快頁面響應(yīng)速度。將返回的替換到頁面中。不過這個參數(shù)目前并無作用,瀏覽器目前會選擇忽略它。 前言 不知你有沒有發(fā)現(xiàn),像Github、百度、微博等這些大站,已經(jīng)不再使用普通的a標簽做跳轉(zhuǎn)了。他們大多使用Ajax請求替代了a標簽的默認跳轉(zhuǎn),然后使用HTML5的新API...
摘要:單頁面應(yīng)用的出現(xiàn)依然存在著爭議性,我們該如何看待他的兩面性呢接下來小生給大家總結(jié)一下他的優(yōu)缺點。單頁面應(yīng)用的優(yōu)勢無刷新體驗沒有了令人詬病的頁面頻繁刷新,同時節(jié)約瀏覽器資源,路由響應(yīng)比較及時,提升了用戶的體驗。 前端猿一天不學(xué)習(xí)就沒飯吃了,后端猿三天不學(xué)習(xí)仍舊有白米飯擺于桌前。IT行業(yè)的快速發(fā)展一直在推動著前端技術(shù)棧在不斷地更新?lián)Q代,前端的發(fā)展成了互聯(lián)網(wǎng)時代的一個縮影。而單頁面應(yīng)用的發(fā)展...
摘要:單頁面應(yīng)用的出現(xiàn)依然存在著爭議性,我們該如何看待他的兩面性呢接下來小生給大家總結(jié)一下他的優(yōu)缺點。單頁面應(yīng)用的優(yōu)勢無刷新體驗沒有了令人詬病的頁面頻繁刷新,同時節(jié)約瀏覽器資源,路由響應(yīng)比較及時,提升了用戶的體驗。 前端猿一天不學(xué)習(xí)就沒飯吃了,后端猿三天不學(xué)習(xí)仍舊有白米飯擺于桌前。IT行業(yè)的快速發(fā)展一直在推動著前端技術(shù)棧在不斷地更新?lián)Q代,前端的發(fā)展成了互聯(lián)網(wǎng)時代的一個縮影。而單頁面應(yīng)用的發(fā)展...
閱讀 2181·2021-11-24 10:26
閱讀 2792·2021-11-23 09:51
閱讀 2907·2021-10-08 10:05
閱讀 1683·2021-09-22 15:18
閱讀 1619·2019-08-29 18:45
閱讀 2143·2019-08-29 18:40
閱讀 3332·2019-08-29 16:16
閱讀 2849·2019-08-29 14:21