JavaScript用ヒアドキュメントライブラリを試作
ちょっと工夫して、下のようなヒアドキュメント・ライブラリを作ってみました。
一応、Windows XP 上の IE6 SP2、Firefox 2.0.0.1、Opera 9.10 でサンプルは動作するようです。
一応、Windows XP 上の IE6 SP2、Firefox 2.0.0.1、Opera 9.10 でサンプルは動作するようです。
外部スクリプトの形でhttps://furyu.tea-nifty.com/script/heredocument.jsに置いてあります。
var hdocLists = new Array() ;
function hdocInit( tgt ) {
if ( !tgt ) tgt = location.href ;
for (;;) {
var xmlHttpObj = null ;
if ( typeof ActiveXObject != "undefined" ) {
var msXml = [ 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP' ] ;
for ( var ci=0; ci < msXml.length; ci++ ) {
xmlHttpObj = new ActiveXObject( msXml[ci] ) ;
if ( xmlHttpObj ) break ;
}
}
else if ( typeof XMLHttpRequest != "undefined" ) {
xmlHttpObj = new XMLHttpRequest() ;
}
if ( !xmlHttpObj ) break ;
xmlHttpObj.open( 'GET', tgt, false ) ;
xmlHttpObj.send( null ) ;
var hdocTgtLines = xmlHttpObj.responseText.split(/\r?\n/) ;
var keyflg = false ;
var lines = new Array() ;
var key = '' ;
for ( var ci=0; ci < hdocTgtLines.length; ci++ ) {
var line = hdocTgtLines[ci] ;
if ( line.match( /^<<(.+)$/ ) ) {
key = RegExp.$1 ;
keyflg = true ;
lines = new Array() ;
}
else if ( keyflg ) {
if ( line.match( new RegExp("^"+key+"$" ) ) ) {
keyflg = false ;
hdocLists[key] = lines.join('\n') ;
continue ;
}
lines.push(line) ;
}
}
break ;
}
} // end of hdocInit()
function hdocGet( key ) {
return hdocLists[key] ;
} // end of hdocGet()
function hdocInit( tgt ) {
if ( !tgt ) tgt = location.href ;
for (;;) {
var xmlHttpObj = null ;
if ( typeof ActiveXObject != "undefined" ) {
var msXml = [ 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP' ] ;
for ( var ci=0; ci < msXml.length; ci++ ) {
xmlHttpObj = new ActiveXObject( msXml[ci] ) ;
if ( xmlHttpObj ) break ;
}
}
else if ( typeof XMLHttpRequest != "undefined" ) {
xmlHttpObj = new XMLHttpRequest() ;
}
if ( !xmlHttpObj ) break ;
xmlHttpObj.open( 'GET', tgt, false ) ;
xmlHttpObj.send( null ) ;
var hdocTgtLines = xmlHttpObj.responseText.split(/\r?\n/) ;
var keyflg = false ;
var lines = new Array() ;
var key = '' ;
for ( var ci=0; ci < hdocTgtLines.length; ci++ ) {
var line = hdocTgtLines[ci] ;
if ( line.match( /^<<(.+)$/ ) ) {
key = RegExp.$1 ;
keyflg = true ;
lines = new Array() ;
}
else if ( keyflg ) {
if ( line.match( new RegExp("^"+key+"$" ) ) ) {
keyflg = false ;
hdocLists[key] = lines.join('\n') ;
continue ;
}
lines.push(line) ;
}
}
break ;
}
} // end of hdocInit()
function hdocGet( key ) {
return hdocLists[key] ;
} // end of hdocGet()
使い方は、
- 最初にhdocInit()で初期化。
デフォルトの対象文書はlocation.hrefですが、同一ドメイン内なら引数にURLを指定することで別文書を指定することも出来る……かもしれません。
- 例えば変数に代入する場合は、
var str = hdocGet('hdoc1'
/*
<<hdoc1
:
:
【ここに文字列を入れます】
:
:
hdoc1
*/
) ;
シンボル(hdoc1の箇所)は任意です。ただし全文書中でユニークなものであること、最初の"<<(シンボル)"と最後の"(シンボル)"は必ず行頭に記述すること(同一行には他に何も書かない)が条件となります。
ちなみにscript要素内以外に記述した"<<(シンボル)"~"(シンボル)"も対象となってしまうので注意。
要はhdocInit()時に、対象文書中の"<<(シンボル)"~"(シンボル)"を探して、その中の文字列をシンボルをキーにしてhashに突っ込んでいるわけです。
正規表現が苦手なので、細かいチェックはしてませんし、書き方もベタベタです(苦笑)。
要はhdocInit()時に、対象文書中の"<<(シンボル)"~"(シンボル)"を探して、その中の文字列をシンボルをキーにしてhashに突っ込んでいるわけです。
正規表現が苦手なので、細かいチェックはしてませんし、書き方もベタベタです(苦笑)。
« なんとか出来ないかな?<JavaScriptでヒアドキュメント | トップページ | やっぱり温泉はいいなぁ »
「パソコン・インターネット」カテゴリの記事
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- BIGLOBE光ネクスト(大阪)の通信速度問題 - プロバイダ選びは難しい……(2015.08.13)
- BOOK☆WALKER さんに関して最近経験した不安と不満(2015.08.10)
- 『#鳥獣戯画制作キット』が楽しい(2015.07.01)
「おもいつき」カテゴリの記事
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
- 【覚書】風柳亭(ココログプロ)をレスポンシブWebデザイン化(Bootstrap3使用)(2015.10.09)
「覚書」カテゴリの記事
- 鍛高譚 ~ カレイにまつわる物語(2018.05.25)
- ココログをTwitterカードに対応させてみる(2016.11.23)
- 神使の兎 ~宇治神社にて~(2016.07.10)
- Twitter 原寸びゅー:PC版ブラウザ用・Twitterの画像閲覧と保存がはかどる拡張機能の紹介(2016.02.12)
- スマートフォンをPC上の音楽を再生するためのリモコンとして使いたい(2016.01.10)
トラックバック
この記事へのトラックバック一覧です: JavaScript用ヒアドキュメントライブラリを試作:
» JavaScriptでHTMLを出力するときの小技(ヘッダメニューの続き) [ガジェットWatch]
以前の記事で、ココログのヘッダ部分にメニューを設置した話を書きました。メニュー作成のHTMLを全部JavaScriptで記述し、外部ファイルに追い出してしまうことで、内容が変わっても「ブログへの反映... [続きを読む]
コメント