ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと

javascript で ヒアドキュメント的なコードを書いてみました。
私が現在使用している IE8 及び Chrome では正常に動作しているようですが、
他のブラウザでも正常に動作するか、時間のある方お知らせください。

コードサンプルは以下のとおり。subHereDoc()関数コメント内の文字列が抜き出されて
ダイアログ表示されればOKと判断してよいと思っています。

#### コードここから ####
/* javascript free code from iph4.net by tasa */
// HereDoc 文字列設定関数
function subHereDoc()
{
/*
<pre>
あいうえお
かきくけこ
さしすせそ
</pre>
*/
}

// HereDoc 文字列取得関数
function subGetHereDoc( xFuncNameOfHereDoc )
{
if( ! window[xFuncNameOfHereDoc] )return "";
var zStr = ""+window[xFuncNameOfHereDoc];
return zStr.substr(0,zStr.indexOf("*/")).substr(zStr.IndexOf("/*")+2);
}

alert(subGetHereDoc("subHereDoc"));

#### コードここまで ####

ここのところ GoogleMapApi連携のJavascriptプログラムを作成していますが、
コードがごちゃごちゃしてきたためにヒアドキュメントを使おうと思い立ちました。

""+window["関数名"]で関数定義自体の文字列が取得できるというのがミソですが、
上記のコードが使えないブラウザがあれば今後の課題としたいと思います。
特に問題が無いと判ればがんがん使いたいと思います。
スクリプトタグ及び /*~*/ コメントタグ以外はそのまま使えると思います。

あと、よろしければ以下のページのアクセスアップにご協力を。
近日中にGoogleMapのルート検索を利用したお絵かきソフト(?)をアップしてみたいと思っています。

J-GoogleMap Top ページ
http://iph4.net/gmap

J-GoogleMap フリーマーカー設定の説明 ページ
http://iph4.net/gmap/iph_help.htm

よろしくお願いします。

A 回答 (3件)

window[xFuncNameOfHereDoc].toSource()



ではどうでしょうか?

----------
やったことはないですが。

<object id="the_data"
data="あいうえお
かきくけこ
さしすせそ"></object>

<script>
alert(document.getElementById('the_data').getAttribute('data'));
</script>

----------
下の方法はすべてのブラウザが対応していない(innerText/textContent/innerHTML/nodeValueなどで取得できない)かもしれません。

<head>
<object id="some-id" type="application/x-datamap">
あいうえお
かきくけこ
さしすせそ
</object>
</head>

昔、W3Cのサイトかどこかで見たのですが、
<head>の中に<object>を記述すると描画されませんので、スクリプトで使用するデータをそのまま記述できます。
本来は『代替コンテンツ』ですが、描画されない事を利用しています。


外部ファイルにできないので、データファイルが大きければHTMLファイルそのものが肥大化してしまいますし、
<script>でベタに書くか、
Ajaxで取得する方がいいと思います。
    • good
    • 0

どうせjavacriptでやるなら、ファイルを分けてajaxで取り込むほうが


現実的ではないですか?
まぁちゃんとやるならdom的な処理なんでしょうけど
    • good
    • 0

FireFoxではコメントを無視(捨てる)ようで空になります。


この手段は昔見たことがありますがブラウザ限定の話ですね。

この回答への補足

FireFoxではコメントどころか、ソース内記述全部でませんね。
セキュリティ関係かはたまた手抜きかそれ以外かどうなんでしょう?

とりあえず、「汚いコード」ではありますけど、
FireFox版でも可能らしい方法見つけてきました。

<script type="text/javascript" id=scr1>

// HereDoc 文字列設定関数
function subHereDoc()
{
/*
<pre>
あいうえお
かきくけこ
さしすせそ
</pre>
*/
}

// HereDoc 文字列取得関数
function subGetHereDoc( xFuncNameOfHereDoc )
{
var zStr = document.getElementById("scr1").innerHTML;
zStr = zStr.substr("function "+xFuncNameOfHereDoc);
zStr = zStr.substr(zStr.indexOf("/*")+2);
zStr = zStr.substr(0,zStr.indexOf("*/"));
return zStr;
}

alert(subGetHereDoc("subHereDoc"));

</script>

他の回答者さんも書かれていますが、このコードでも scriptタグの ID属性を見に行っているので
外部スクリプト化でもそのまま使えそうですね。

枝分かれしちゃいますが、こちらのコードでも検証お願いします。
(時間があるときに、ですけど)

よろしくお願いします。

補足日時:2011/11/10 09:28
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!