2004年06月20日

ブログタイトルを読み込む

http://jsgt.org/mt/01/loadTitle.html

JavaScriptでMovable Typeのブログタイトルを読み込んでみます。昔作ったxmlのロード関数を利用してatomのxmlを読み込み加工することでブログタイトルのリンクを作成してみました。JavaScriptだから.rdfや.xmlに書かれた内容はすべて好きなように取り出して加工できます(^^)。

ま、XMLが役に立ちそうな気がしてきたのははじめてかもf^^;;;
#ただ、もしかするとノートンとかの設定によってだめかもしれない。。。 どうですか?
#Win IEは[ツール]-[インターネット オプション]-[セキュリティ]-[レベルのカスタマイズ]でActiveXが「無効」になっていると動作しません。って、Win IEではActiveX使ってるんだから当たり前か。。。。

一応WinIE6,NN7,Moz,Firefox/Mac NN1,Moz /Linux Mozでは動いています。
<script type="text/javascript">
<!--

/*========================================================== 
//クロスブラウザ load関数

  引数  : url    XMLファイルのurl
          func   読み込み成功時の起動関数名
  戻値  : 読み込まれたXMLノードツリー
  例    : loadFile( 'data.xml', func1 )
         function func1(){alert('test')}
  Support http://game.gr.jp/js/
*/

function loadFile(url,func)
{
  if(document.getElementById){
    if (window.ActiveXObject)
    {
      var xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
          xmlDoc.async = false
          if(xmlDoc.load(url)){func(xmlDoc)}
    } else if ( document.implementation && 
                document.implementation.createDocument )
    {
      var xmlDoc = document.implementation.createDocument("","",null)
          xmlDoc.onload = function (){func(xmlDoc)}
          xmlDoc.load(url)
    }
    return xmlDoc
  }
}
/*==========================================================*/


//読み込んだXMLのデータをもとにHTMLへ書き出す
function writeXMLData(xdoc)
{

  var listLen = 10 //表示件数 wktitle.length

  //XML内の"title"という名前のタグの配列を作る
  var wktitle = xdoc.getElementsByTagName("title")

  //書き出すためのdivを作っておく
  document.body.removeChild(document.body.firstChild)
  var wkdiv = document.body.insertBefore(
          document.createElement("div"), document.body.firstChild)
 
  //"title"タグが出てきた順に処理する
  for( i = 1 ; i < listLen + 1 ; i++ )
  { 
    if ( wktitle.length <= i ) break;
    //urlを取り出す
    var wklink     = xdoc.getElementsByTagName("link")[i]
    var wklinkHref = wklink.attributes.getNamedItem("href").nodeValue

    //各タグ内のfirstChildのデータだけをinnerHTMLで書き出す
    wkdiv.innerHTML += '<a href="'+ wklinkHref +'"><font size=-1>'
                    +   wktitle[i].firstChild.nodeValue 
                    +  '</font></a><br>'
  }
  wkdiv.innerHTML += '<hr>'
}

//-->
</script>
<div id="dmy">ブログタイトルを読み込みます</div>

<input type   = "button" 
       value  = "ブログタイトル読み込み 最新の10件"
       onclick= "loadFile('http://jsgt.org/mt/01/atom.xml',writeXMLData)">
★2004.6.21ちょっと修正 コメントを参照してください http://jsgt.org/mt/mt-comments.cgi?entry_id=47 投稿者 tato : 2004年06月20日 13:37 | トラックバック
コメント

divがすでにあれば削除する
document.body.removeChild(document.body.firstChild)
の部分があんまりにも手抜きなので修正しました。

このままだとdocument.body.firstChildを何が何でも削除してしまい汎用性に欠けるので、divに名前をつけて明示的に削除するという方法に変えました。

  //書き出すためのdivを作っておく
  if(document.getElementById("writeXMLDataDiv")){
    //divがすでにあれば削除
    document.body.removeChild(
      document.getElementById("writeXMLDataDiv")
    )
  } 
  //div作成
  wkdiv = document.body.insertBefore(
    document.createElement("div"), document.body.firstChild
  )
  //命名する
  wkdiv.setAttribute("id","writeXMLDataDiv")

Posted by: 高橋登史朗 : 2004年06月21日 15:05
コメントする









名前、アドレスを登録しますか?