2010年11月17日

Google Desktop Gadget 開發筆記

################################################################
################################################################
2010/11/17
主頁一定是main.xml,在main.js讀取其他檔的funcation,可先用以下方法丟入一變數detailView
var detailsView = new DetailsView();

detailsView.SetContent(
    "", // Item's displayed website/news source. -> not used for an XML details view
    undefined, // Time created
    "details.xml", // The XML file
    false, // Whether time is shown as absolute time
    0); // Content layout flags


plugin.showDetailsView(detailsView, "", gddDetailsViewFlagNone, onDetailsViewFeedback);

function onDetailsViewFeedback(detailsViewFlags) {
  //This function is called when there is feedback from the details view
}

showDetailsView第三欄位的其他的應用
The following flags could be passed for the third parameter in the showDetailsView function:
gddDetailsViewFlagNone
No flags are passed.
gddDetailsViewFlagToolbarOpen
Make the details view title clickable like a button.
gddDetailsViewFlagNegativeFeedback
Add a negative feedback button in the details view (e.g. 'Don't show me items like this').
gddDetailsViewFlagRemoveButton
Add a 'Remove' button to the details view.
gddDetailsViewFlagShareWithButton
Add a button in the details view which displays the friends list when clicked. The user can share the content item with them.

實際Case
function onOptionView( ){
    var options = new DetailsView();
    options.SetContent(undefined, undefined, "opt.xml", false, 0);
    plugin.showDetailsView(options, "", gddDetailsViewFlagNoFrame, onDetailsViewFeedback);
}
####################################################################
####################################################################
2010/11/18
關於以下XMLHttpRequest的講解來源出處賴榮樞的軟體資訊誌


XMLHttpRequest最大的功能,是能讓前端網頁的JavaScript程式在不需要重新載入網頁、不需要使用者介入的情況之下,於背景運作的方式向後端伺服器提出HTTP要求並收到後端的回應。因此網頁可以利用XMLHttpRequest物件,創建出優於傳統的網頁程式。


建立XMLHttpRequest實體
要讓網頁程式能使用XMLHttpRequest,基本的步驟是先要建立XMLHttpRequest實體(instance),接著利用所建立的XMLHttpRequest實體向伺服端提出要求,然後再接收、處理伺服端的回應。
但因為各家瀏覽程式是以不同的形式提供XMLHttpRequest的功能,因此網頁設計人員如果想讓網頁充分支援各家瀏覽程式,就必須針對不同瀏覽程式而為之。例如網頁若要在IE提供XMLHttpRequest功能,必須先有如下的JavaScript程式:
var req = new ActiveXObject("Microsoft.XMLHTTP");

如果是Mozilla(包括Firefox等)以及Safari,則必須是如下的JavaScript程式:
var req = new XMLHttpRequest();


IE的XMLHttpRequest物件亦有新版,所以應該利用下列的方式建立XMLHttpRequest實體:

} else if (window.ActiveXObject) { // IE7, Mozilla, Safari, Opera...
  try {
         http_request = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
  try {
         http_request = new ActiveXObject("Microsoft.XMLHTTP"); //IE 5.x, 6
      } catch (e) {}
   }
}


設定非同步要求的伺服端回應處理函式
在向伺服端提出要求之前,網頁程式要先設定好非同步要求的伺服端回應處理函式。XMLHttpRequest物件提供了一個名為onreadystatechange的屬性,只要前端向後端的要求狀態有所改變,就會觸發指定給這個屬性的事件處理常式:
http_request.onreadystatechange = 事件處理常式的名稱;

要注意的是,事件處理常式的名稱之後不能有括號,而且也不能傳入參數。另一種寫法,是直接將處理伺服端回應的程式碼寫在其後,此時就要用function(),而不自訂名稱,並且要以大括號括住處理伺服端回應的程式碼,而為了方便起見,通常會以下列方式撰寫處理函式:
// http_request是程式建立的XMLHttpRequest實體
http_request.onreadystatechange = function() { processReqChange (http_request); };

這個處理函式首先要檢查伺服端的處理狀態,如果伺服端正確的處理完前端所要求,通常會再以這個處理函式接收伺服端送回的資料(如果有資料傳回的話)。伺服端的處理狀態包括要求的處理狀態以及伺服端的狀態碼兩種,首先會以XMLHttpRequest物件的readyState屬性來檢查要求的處理狀態,要求的處理狀態一共分成五個階段:
0:尚未開始(uninitialized)
1:正在載入(loading)
2:已載入(loaded)
3:處理中(interactive)
4:完成(complete)

也就是說,如果要求的處理狀態為4(readyState),即表示用戶端已經完成收到伺服端的回應,用戶端可繼續處理。
接著要以XMLHttpRequest物件的status屬性檢查HTTP伺服端所回應的狀態碼,通常要等到代表OK的200(status),才表示伺服端皆已正確處理完成。


向伺服端提出要求
要以XMLHttpRequest物件的open和send方法,向伺服端提出要求:
open("要求的方式", "所要求檔案的URL"[, 同步旗標[, "使用者名稱"[, "密碼"]]]);


open的method參數如同一般向HTTP伺服端提出的要求方法,例如GET、POST、HEAD或其他HTTP伺服端能接受的方法。此外,請依照HTTP標準,以大寫字母表示所要求的方法,以免有些瀏覽程式無法正常運作;例如請寫成GET,而不要寫成get。
open的第二個參數,是所要求檔案的URL,而且基於安全的考量,不能要求位於第三方網域的檔案。第三個參數「同步旗標」,是以布林值決定是否為非同步處理,TRUE即為非同步。第三個以後的參數均為選用參數,但若要以非同步的方式處理,就一定要將第三個參數設為TRUE;此外,如果所要求的檔案必須提供使用者名稱及密碼才能取用,可以第四、第五個參數指定。
send方法只有一個參數,也就是以POST提出要求、要給伺服端處理的資料,如果open是以GET要求伺服端,此參數為null或空字串。
send();