成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

[藍]Gmail 使用的AJAX技術研究

2010-08-28 10:47:53來源:西部e網作者:

現在提起AJAX,大家都立刻會想起Gmail、gogle map這幾個經典的AJAX應用。Gmail的優良表現我們都看過了,那么它的實現你研究過了嗎?它怎么在幾個不同的瀏覽器上可以一致的實現xml異步調用的呢?一起來看看吧。

首先,登錄gmail以后我們會先進入這個頁面:

<html>
<head>
 <meta content="text/html; charset=UTF-8" http-equiv="content-type">
 <title>Gmail</title>
 <link rel="alternate" type="application/atom+xml" title="Gmail Atom Feed" href="feed/atom" />
 <script src="?view=page&name=browser&ver=c0d3d44c64799453"></script>
</head>
<noscript>
 <font face=arial>
  應啟用 JavaScript,才能在標準視圖中使用 Gmail。然而,JavaScript 似乎已被禁用,要么就是您的瀏覽器不支持 JavaScript。要使用標準視圖,請更改您的瀏覽器選項以啟用 JavaScript,然后<a href="">重試</a>。<p>要使用 Gmail 的基本 HTML 視圖(不需要 JavaScript),<a href="?ui=html&zy=n">請單擊此處</a>。</p>
 </font>
</noscript>
<script>
<!--
var fs_time = (new Date()).getTime();
function wfs() {
 try {
  if (parent != window && parent.wfs) {
   return false;
  }
 } catch(e) {
 }
 if (top.location.href.indexOf('nocheckbrowser') != -1) {
  return true;
 }
 if (!is_browser_supported) {
  top.location = '?ui=html&zy=j';
  return false;
 }
 var testcookie = 'jscookietest=valid';
 document.cookie = testcookie;
 if (document.cookie.indexOf(testcookie) == -1) {
  top.location = 'html/zh-CN/nocookies.html';
  return false;
 }
 document.cookie = testcookie + ';expires=' + new Date(0).toGMTString();
 var agt = navigator.userAgent.toLowerCase();
 if (agt.indexOf('msie')!= -1 && document.all &&agt.indexOf('opera') == -1 && agt.indexOf('mac') == -1) {
  eval("var control = (agt.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';try {new ActiveXObject(control);} catch (e) {top.location = 'html/zh-CN/noactivex.html';}");
 }
 return true;
}
function lj() {
 js.location.replace('?view=page&name=js&ver=d6079057e81abd3c');
}
if (wfs()) {
 document.write("<frameset onload=lj() rows=\"100%,*\" border=0><frame name=main src=html/zh-CN/loading.html frameborder=0 noresize scrolling=no><frame name=js src=html/zh-CN/loading.html frameborder=0 noresize></frameset>");}
//-->
</script>
</html>

這是主框架網頁兼瀏覽器檢測頁。如果瀏覽器通過了檢測(支持javascript、cookie和xml控件)則在頁面上寫一段框架代碼

要注意到的是google在這里耍了一個小花招,那個叫做main的框架頁面里面看來沒有多少東西,好東東都在那個叫js的框架里面呢。

我們接著把這個js框架拉出來看看:

整整1500多行的javascript代碼!

這個頁面有240多k,幾乎全都是javascript代碼。有興趣分析的兄弟姐妹們請點這里下載

其實其中大部分都是老生常談的js代碼了,不過我們可以一窺google的編碼風格:盡可能壓縮信息量,變量名能用一個字母的絕不用兩個,函數名一概都是兩個字母的,函數內的會車是沒有的,縮進也是沒有的。雖然代碼沒有特地加密,但是如此處理一番之后也就沒什么可讀性了。還好系統的關鍵字是不能縮水的,順著xml控件的名字我們可以揪出來跟AJAX異步加載數據相關的幾個關鍵函數:

 

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

整整1500多行的javascript代碼!

這個頁面有240多k,幾乎全都是javascript代碼。有興趣分析的兄弟姐妹們請點這里下載

其實其中大部分都是老生常談的js代碼了,不過我們可以一窺google的編碼風格:盡可能壓縮信息量,變量名能用一個字母的絕不用兩個,函數名一概都是兩個字母的,函數內的會車是沒有的,縮進也是沒有的。雖然代碼沒有特地加密,但是如此處理一番之后也就沒什么可讀性了。還好系統的關鍵字是不能縮水的,順著xml控件的名字我們可以揪出來跟AJAX異步加載數據相關的幾個關鍵函數:

 

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

<html>
<head>
 <meta content="text/html; charset=UTF-8" http-equiv="content-type">
 <title>Gmail</title>
 <link rel="alternate" type="application/atom+xml" title="Gmail Atom Feed" href="feed/atom" />
 <script src="?view=page&name=browser&ver=c0d3d44c64799453"></script>
</head>
<noscript>
 <font face=arial>
  應啟用 JavaScript,才能在標準視圖中使用 Gmail。然而,JavaScript 似乎已被禁用,要么就是您的瀏覽器不支持 JavaScript。要使用標準視圖,請更改您的瀏覽器選項以啟用 JavaScript,然后<a href="">重試</a>。<p>要使用 Gmail 的基本 HTML 視圖(不需要 JavaScript),<a href="?ui=html&zy=n">請單擊此處</a>。</p>
 </font>
</noscript>
<script>
<!--
var fs_time = (new Date()).getTime();
function wfs() {
 try {
  if (parent != window && parent.wfs) {
   return false;
  }
 } catch(e) {
 }
 if (top.location.href.indexOf('nocheckbrowser') != -1) {
  return true;
 }
 if (!is_browser_supported) {
  top.location = '?ui=html&zy=j';
  return false;
 }
 var testcookie = 'jscookietest=valid';
 document.cookie = testcookie;
 if (document.cookie.indexOf(testcookie) == -1) {
  top.location = 'html/zh-CN/nocookies.html';
  return false;
 }
 document.cookie = testcookie + ';expires=' + new Date(0).toGMTString();
 var agt = navigator.userAgent.toLowerCase();
 if (agt.indexOf('msie')!= -1 && document.all &&agt.indexOf('opera') == -1 && agt.indexOf('mac') == -1) {
  eval("var control = (agt.indexOf('msie 5') != -1) ? 'Microsoft.XMLHTTP' : 'Msxml2.XMLHTTP';try {new ActiveXObject(control);} catch (e) {top.location = 'html/zh-CN/noactivex.html';}");
 }
 return true;
}
function lj() {
 js.location.replace('?view=page&name=js&ver=d6079057e81abd3c');
}
if (wfs()) {
 document.write("<frameset onload=lj() rows=\"100%,*\" border=0><frame name=main src=html/zh-CN/loading.html frameborder=0 noresize scrolling=no><frame name=js src=html/zh-CN/loading.html frameborder=0 noresize></frameset>");}
//-->
</script>
</html>

這是主框架網頁兼瀏覽器檢測頁。如果瀏覽器通過了檢測(支持javascript、cookie和xml控件)則在頁面上寫一段框架代碼

要注意到的是google在這里耍了一個小花招,那個叫做main的框架頁面里面看來沒有多少東西,好東東都在那個叫js的框架里面呢。

我們接著把這個js框架拉出來看看:

整整1500多行的javascript代碼!

這個頁面有240多k,幾乎全都是javascript代碼。有興趣分析的兄弟姐妹們請點這里下載

其實其中大部分都是老生常談的js代碼了,不過我們可以一窺google的編碼風格:盡可能壓縮信息量,變量名能用一個字母的絕不用兩個,函數名一概都是兩個字母的,函數內的會車是沒有的,縮進也是沒有的。雖然代碼沒有特地加密,但是如此處理一番之后也就沒什么可讀性了。還好系統的關鍵字是不能縮水的,順著xml控件的名字我們可以揪出來跟AJAX異步加載數據相關的幾個關鍵函數:

 

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

整整1500多行的javascript代碼!

這個頁面有240多k,幾乎全都是javascript代碼。有興趣分析的兄弟姐妹們請點這里下載

其實其中大部分都是老生常談的js代碼了,不過我們可以一窺google的編碼風格:盡可能壓縮信息量,變量名能用一個字母的絕不用兩個,函數名一概都是兩個字母的,函數內的會車是沒有的,縮進也是沒有的。雖然代碼沒有特地加密,但是如此處理一番之后也就沒什么可讀性了。還好系統的關鍵字是不能縮水的,順著xml控件的名字我們可以揪出來跟AJAX異步加載數據相關的幾個關鍵函數:

 

function vb(){var a=null;if(r){var b=fG?"Microsoft.XMLHTTP":"Msxml2.XMLHTTP";try{a=new ActiveXObject(b)}catch(c){q(c);alert("您需要啟用活動腳本功能和activeX 控件。")}}else{a=new XMLHttpRequest();if(!a){;alert("此瀏覽器不支持 XMLHttpRequest。")}}return a}
//emu注釋 構造XML控件并返回給調用者

function ot(a,b){;try{a.send(b)}catch(c){q(c);if(c.number==-2146697208){alert("請確保 Internet Explorer 的”語言\”設置部分不是空白。")}}}
//emu注釋 執行發送數據操作 a:XML控件 b:要發送的數據

function Wf(a,b,c){Da(3);b=Ld(b);Hf(a,b,c)}
//emu注釋 a:XML控件 b:訪問的url c:回調函數 Da是驗證參數長度的函數 
//
Ld是一個url轉換加工的函數,主要處理url自帶的CGI參數和翻頁的頁數等

function Hf(a,b,c){Da(3);a.onreadystatechange=c;a.open("GET",b,true);ot(a,null)}
//emu注釋 不發送數據直接請求資源 a:XML控件 b:訪問的url c:回調函數

function nt(a,b,c,d){Da(4);a.onreadystatechange=d;a.open("POST",b,true);ot(a,c)}
//emu注釋 發送數據并請求資源 a:XML控件 b:訪問的url c:要發送的數據 d:回調函數

 基本上就這么多了,很失望吧,沒有什么新鮮的東西。發送http請求之后它又怎么處理返回的xml的呢?事實上他沒有處理。他所處理的僅僅是最基本responseText,而cgi則直接生成js腳本到客戶端回調(用eval運行),或者生成文本信息。這就是為什么gmail可以輕松跨域幾個瀏覽器了。

作為最受推崇的一個AJAX應用,卻幾乎沒有用到xml。像這樣用xml控件來收發文本信息后在頁面上展現的技術,基本上就是現在AJAX最流行的應用方式了,不過這樣也能叫AJAX嗎?我寧可就叫它AJ,最多叫AJAH。

今天先到這,下回再過來分析另一個完全不同的AJAX應用吧。大家周末愉快!

 

關鍵詞:GmailAJAX

贊助商鏈接:

主站蜘蛛池模板: 曲阜市| 永新县| 隆林| 景宁| 越西县| 汾西县| 海晏县| 萍乡市| 东城区| 牡丹江市| 东港市| 舒兰市| 玉林市| 晋州市| 福州市| 米脂县| 侯马市| 赣榆县| 淮南市| 云南省| 富宁县| 玛沁县| 稷山县| 昌都县| 安图县| 上思县| 满洲里市| 四会市| 麻栗坡县| 肃南| 杭州市| 永寿县| 科尔| 阳谷县| 呼图壁县| 新竹市| 油尖旺区| 建宁县| 东丰县| 葵青区| 新郑市|