2004-07-06(火) [長年日記]
■ tDiary TrackBack Script for Sleipnir
こないだ紹介したSleipnir用のTrackBackスクリプト、相手のページのURLを挿入してくれるとTrackBack的には完璧なんだが……と書いたら、hsbtさんがクリップボードにコピーするという苦肉の策を出してくれた。
まぁこのあたりが限度かと思っていたら(JavaScriptには詳しくないので何ができるのかもよくわからない)、別のテクを紹介してもらった(?)。おぉ、ちゃんとリンクが挿入される!
というわけで、両者を合体すると、こんな感じになった。もっとスマートに書けるかも知れないけど、動いてるからいいや。
TrackBackしたいページでこのスクリプトを実行すると
- 更新ページが開き
- 本文冒頭にそのページへのリンクが挿入され
- TrackBack ping URLも設定済み
という状態ですぐに反応を書き始めることができる。なお、挿入されるリンクはWikiスタイルなので、別のスタイルの場合にはスクリプト末尾のコードをちょっといじる必要がある。プラグイン集に入れちまおうか。
// // tDiaryでTrackBack for Sleipnir // // 現在見ているページに対して実行すると、そのページにTrackBackを打つための // 情報が入った更新ページが開きます // // 【要カスタマイズ】update.rbへのURL // ここに日記更新用のURLを記述してください var td_update_url = "http://url.of.your.diary/update.rb"; // // 以下、スクリプト本体 // var pnir = new ActiveXObject( "Sleipnir.API" ); var id = pnir.GetDocumentID( pnir.ActiveIndex ); var document = pnir.GetDocumentObject( id ); if (document == null) { pnir.MessageBox("Document オブジェクトを作成できません"); } else { window = pnir.GetWindowObject( id ); var org_title = document.selection.createRange().text if ( org_title == "" ) { org_title = document.title; } var org_url = pnir.url window = null; var str = document.body.innerHTML; str.match( /trackback:ping=[\'\"](http.+)[\'\"]/i ); var ping_url = RegExp.$1; var td_id = pnir.NewWindow( td_update_url+'?plugin_tb_url='+escape(ping_url), true ); while( pnir.IsBusy( td_id ) == true ) { WScript.Sleep( 500 ); } //update.rbのドキュメントを取得 var td_doc = pnir.GetDocumentObject( td_id ); if( td_doc==null ){ pnir.MessageBox("td_doc オブジェクトを作成できません"); } else{ //思いっきり場所決めうちでupdate.rbのtextareaに //(Wikiスタイル)見出しを挿入する var f = td_doc.forms[0]; if( f!=null ){ var t = f.elements[6]; if( t!=null ){ t.value = ""; t.value += "! [["; t.value += org_title; t.value += "|"; t.value += org_url; t.value += "]]"; t.value += "\n"; t.focus(); } } } document = null; } pnir = null;