gadgets.io.makeRequest をDOMで使う
他のドキュメントを見ても、DOMで取得した後の処理が書いていないので少し悩む。
下記のように遠回りして解決。
1.なぜかContentType.TXTで、一度textからdomに変換しようとしていた。
そのため、DOMパーサーを使用したりで、結局IEとFirefoxの違いで分岐させたりなど面倒。
(参考1)
2.dom.getElementsByTagName("mixi_account_name")[0].textContent をテキストで出力していたが、
textContentはFireFoxだけでIEで使用できないとのこと。無駄にinnerTextでIEに対応させたりで面倒。
(参考2)
3.結局すべての文字情報を一旦配列にいれて・・firstChild.nodeValueで文字を取得したことで、解決。
(本文)
参考1.
//DOMパーサー function parseXml(xmlText) { if (window.ActiveXObject) { var domDoc = new ActiveXObject('Microsoft.XMLDOM'); domDoc.async = false; domDoc.loadXML(xmlText); return domDoc; }else if(window.DOMParser) { var domParser = new DOMParser(); return domParser.parseFromString(xmlText, "application/xml"); }else { return null; } }
参考2.
if (/MSIE/.test(navigator.userAgent)){ document.getElementById("d2").innerText = "<b>aaa</a>"; alert("MSIE"); // 確認用アラート } else if (/Firefox/.test(navigator.userAgent)){ document.getElementById("d2").textContent = "<b>aaa</a>"; alert("Firefox"); // 確認用アラート }
本文===>>
var url = "http://.../...xml"; var params = {}; //期待するコンテンツは XML ファイル params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.DOM; //キャッシュする時間を設定する params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0; //署名は付与しない NONE params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.NONE; gadgets.io.makeRequest(url, function(response) { var dom = response.data; //XML内の"mixi_account_name"という名前のタグ(要素)の配列を作る var mixi_account_name = dom.getElementsByTagName("mixi_account_name") //XML内の"max_count"という名前のタグ(要素)の配列を作る var max_count = dom.getElementsByTagName("max_count") //XML内の"all_count"という名前のタグ(要素)の配列を作る var all_count = dom.getElementsByTagName("all_count") //XML内の"game_count"という名前のタグ(要素)の配列を作る var game_count = dom.getElementsByTagName("game_count") //XML内の"score"という名前のタグ(要素)の配列を作る var scores = dom.getElementsByTagName("score"); //tableタグを作成 html = '上位30人を表示中'; html += '<table width="940" border="0" id="table-01" class="sortable"><thead><tr>'; html += '<th class="nosort">ランク</th><th>名前</th><th>最大得点</th><th>累計得点</th><th>挑戦回数</th>'; html += '</tr></thead><tbody>'; for (var i=0; i<scores.length; i++){ var rank = i + 1; html += '<tr><td>' + rank + '</td>'; html += '<td>' + mixi_account_name[i].firstChild.nodeValue + '</td>'; html += '<td>' + max_count[i].firstChild.nodeValue + '</td>'; html += '<td>' + all_count[i].firstChild.nodeValue + '</td>'; html += '<td>' + game_count[i].firstChild.nodeValue + '</td>'; html += '</tr>'; } html += '</tbody></table>'; //divを置き換え document.getElementById("datalist").innerHTML = html; }, params);