少年幃禿的煩惱


心情也微微的...凸

最近的學習心得 都改放到 少年幃禿的煩惱@Google Sites

2008/08/18

GM_xmlhttpRequest & overrideMimeType

最近在寫 user script 的時候不小心發現, 原來 GM_xmlhttpRequest 可以拿來處理 corss-domain 的 request.

不過有個地方需要特別注意一下, 取得其他 domain 的 request 之後, 想使用 DOM 來處理, 在使用 innerHTML 的同時, 瀏覽器會向當時畫面的主機請求 href="this/is/a/link" 或是 src="this/is/a/file.jpg"
等資料, 所以要特別注意, 必須要先經過處理才可以使用 innerHTML.

另外因為 GM_xmlhttpRequest 取回 request 預設是使用 UTF-8 來處理的, 如果取回的資料是其他語系的話, 可以使用 overrideMimeType 來處理, 這樣文字就可以正常顯示了.

GM_xmlhttpRequest({ method: "GET", url: "http://cross.domain.com/index.html", // 處理非 UTF-8 字型 overrideMimeType: "text/html; charset=Shift_JIS", onload: function(t) { // 將 href/src 內容裡, 非 http:// 開頭的全部加上原本的 domain. var foo = t.responseText .replace(/(href|src)\=[\"\'](?!http\:\/\/)(.*?)[\"\']/ig, '$1="http://cross.main.com/$2"'); var bar = document.createElement("DIV"); // 寫入的同時會向主機要求 href/src 的內容. bar.innerHTML = foo; } });