ajax|google
google reader 是google的另一個AJAX應用,以前前一直誤以為是個瀏覽器外掛程式,因此沒有留意。昨天在網友Jared提醒下去開通了一個才見識了一吧。匆匆crack了一下代碼,因為剛剛開通上面也沒有多少資料,隨便晃兩眼吧。
首先登入readr,把reader頁面另存到本地,得到一個主檔案(htm),一個指令碼,和一個css樣式表。
把html檔案中的這行去掉:
<!-- saved from url=(0041)http://www.google.com/reader/things/intro -->
這樣xmlhttp就可以無限制的訪問網路資源了。
reader引用了一個莫名其妙的js檔案,用數字做檔案名稱,不知道名字是不是經常變化的,我昨天下載的時候的名字是: http://www.google.com/reader/ui/874310214-main.js
檢查一下資料發送和接收的地方,找到了一個關鍵點是指令碼的第479行:
;D.prototype.Hb=function(a){if(this.overrideCache&&a.indexOf("?")==-1){var b=(new Date()).getTime();a=a+"?"+b}this.uri=a}
uri這樣的標識符都保留下來了,充分說明google沒有刻意的混淆過代碼。我們就從這裡入手:
;D.prototype.Hb=function(a){
if(this.overrideCache&&a.indexOf("?")==-1){
var b=(new Date()).getTime();a=a+"?"+b
}
this.uri="http://www.google.com"+a
window.open(this.uri);
}
this.uri="http://www.google.com"+a 是為了讓xmlhttp能夠正確的找到網站。
window.open(this.uri);是為了同時把xmlhttp試圖訪問的內容用新視窗開啟來看看。
carck後的指令碼在這裡 http://www.blogjava.net/Files/emu/874310214-main.rar 。首頁面上有我的個人資訊,就不上傳完整的本地可運行版本了。
儲存指令碼後重新開啟htm頁面,可以看到,在頁面顯示出來的過程中載入了兩個動態xml資料來源。
http://www.google.com/reader/atom/user/*********************/state/com.google/reading-list?n=20
http://www.google.com/reader/atom/user/********************%2Fpref%2Fcom.google%2Fprefs?complete=true
中間的星號部分是我的使用者編號,就不貼出來了。大家自己實驗的時候可以看到自己的。
這兩個資料原在瀏覽器視窗中開啟的時候非常出乎意料的,居然返回的是兩個xml檔案!之前我多次在說google推行AJAH,看來怪錯好人了,google也用正宗的AJAX的。
- <feed xmlns="
http://www.w3.org/2005/Atom">
<title>
user/***************/state/com.google/reading-list</title>
<id>
tag:google.com,2005:reader/user/***************//state/com.google/reading-list</id>
<updated>
2005-12-02T04:03:50Z</updated> </feed>
-<feed xmlns="
http://www.w3.org/2005/Atom">
<title>
user/***************/pref/com.google/prefs</title>
<id>
tag:google.com,2005:reader/user/***************/pref/com.google/prefs</id>
<updated>
2005-12-02T04:03:50Z</updated> </feed>
我剛剛開通reader,裡面都還什麼資料都沒有呢。你看到什麼了呢?