• 締切済み

javascriptでヒアドキュメント書きました

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 よろしくお願いします。

  • iph4
  • お礼率0% (0/3)

みんなの回答

回答No.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で取得する方がいいと思います。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

どうせjavacriptでやるなら、ファイルを分けてajaxで取り込むほうが 現実的ではないですか? まぁちゃんとやるならdom的な処理なんでしょうけど

  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

FireFoxではコメントを無視(捨てる)ようで空になります。 この手段は昔見たことがありますがブラウザ限定の話ですね。

iph4
質問者

補足

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属性を見に行っているので 外部スクリプト化でもそのまま使えそうですね。 枝分かれしちゃいますが、こちらのコードでも検証お願いします。 (時間があるときに、ですけど) よろしくお願いします。

関連するQ&A

  • javascriptの問題数を増やしたいです。

    javascriptの出題問題数を増やしたいです。 どこの数値を変更すればいいですか? 今10問までですけれども例えば40問まで増やしたいとすればどの数値を変更すればいいですか? window.onload = function(){ var data = location.href.split("?")[1]; var nowQ = data.substr(0,2); var allQ = data.substr(2,2); var okQ = data.substr(4,2); var nowA = data.substr(6,2); 参考URL https://www.kuuneruch.com/javascript01/ よろしくお願いします。

  • javascriptでonclickに複数関数を割

    javascriptでonclickに複数関数を割り当てる場合 HTML内であれば、 <button ... onClick="a1();a2();a3();"> でいけると思いますが javascriptにて function a1() { } function a2() { } window.onload = "a1;a2;" のような記述は駄目でした 一つであれば window.onload = a1; でOKですが javascriptでonclickなどに複数関数を割り当てる 書式を教えてください よろしく、お願いします

  • Javascript+PHPで変数を受け渡したい

    PHP変数の文字列データを、 <a href ="Javascript:xxx($data)">として、関数を実行させたときに、関数側での function xxx(data){ --データで指定されたhtmlへ移動したい } という方法は、実現できないのでしょうか。 Javascriptのエラーでデータの受け渡しができていないみたいなのですが、わかる方教えてください。

  • JavaScriptコードの最適化

    JavaScript、超初心者です。 よくわからないので、同じコード3つ書いています。 もっと簡単に最適化されたコードはどう書けばよいですか? 宜しくお願いします。 $(function () { $(".aaa").click(function(){ window.open($(this).find("a").attr("href"), '_blank'); return false; }); $(".bbb").click(function(){ window.open($(this).find("a").attr("href"), '_blank'); return false; }); $(".ccc").click(function(){ window.open($(this).find("a").attr("href"), '_blank'); return false; }); });

  • FireFoxでJavascript「window.close()」が効きません。

    別ウィンドウを開いて「閉じる」ボタンをクリックするとウィドウを閉じる、というレイアウトを作成しているのですが、 <A HREF="javascript:window.close()">ウインドウを閉じる</A> では、firefoxでは動作しません。 情報を探してみて、以下のようなソースが有効なようなのですが、 <head>の中に以下を記述。 <script type="text/javascript" language="JavaScript"> <!-- function close_win(){ var nvua = navigator.userAgent; if(nvua.indexOf('MSIE') >= 0){ if(nvua.indexOf('MSIE 5.0') == -1) { top.opener = ''; } } else if(nvua.indexOf('Gecko') >= 0){ top.name = 'CLOSE_WINDOW'; wid = window.open('','CLOSE_WINDOW'); } top.close(); } --> </script> で、閉じるボタンを置きたい場所に <A HREF="javascript:close_win()">ウインドウを閉じる</A> が、ローカルで見ている範囲ですが、動作しません。 ページ内リンクみたいにページトップに戻るだけ。。。 ちなみにIEとネスケでは正常に動作しました。 どなたかお分かりになる方、ご教授願えませんか? 宜しくお願いします。

  • JavaScriptでIE6を検知し、転送する。

    IE6からアクセスされた場合、 ・アラートを表示してアップグレードを促す。 ・同時にアップグレード用のウェブページに転送する。 という処理をJavaScriptで行いたいと思いました。 ブラウザ判別は、↓こちらのサイトを参考にしました。 http://winofsql.jp/VA003334/infoboard.php?mid=sjscript&id=070828100942&pid=3 そして、以下のコードをhead内に記入しています。 ============================== <script type="text/javascript"> var userAgent = window.navigator.userAgent.toLowerCase(); var appVersion = window.navigator.appVersion.toLowerCase(); if (userAgent.indexOf("msie") > -1) { if (appVersion.indexOf("msie 6.0") > -1) { window.alert("InternetExproler Ver.6 をご利用の方は、新しいバージョンへアップグレードして下さい。"); window.location.href = "http://www.xxxxxxxxxx.com"; } } </script> ============================== IEtesterで試すと、一応Ver.6の際に、狙った動作はしています。 しかし、何故かIEtester上で「ScriptError」が表示されます。 JavaScriptは、だいぶ不安があるので、この「ScriptError」が気になって仕方ありません。 やはりどこか悪いところがあるのでしょうか。。 どなたかご意見を聞かせて下さい。 また、headの中に長々と書くのも好きではないので、上の内容を丸ごとコピーして、「ie6.js」というファイル名をつけ、jsディレクトリに入れ、下のようにしました。 <script type="text/javascript" src="js/ie6.js"></script> こうすると何故かアラートの文字が文字化けしてしまいます。 (head内に書いてる時はしない。) 何故なのでしょうか。 よろしくお願い致します。

  • JavaScriptとVBScriptに関して

    こんにちは。質問です! JavaScriptの確認ダイアログに「はい」「いいえ」「キャンセル」を出す関数がないので、 execScript()を使って、VBScriptのMsgBoxで出力することにしました。 以下、簡単なソースです。 function msgBox() {   var msg1 = "次のページへ移ります。";   var msg2 = "よろしいですか?";   //msg1とmsg2を改行してMsgBoxに出力したい。   var allMsg = msg1 + "vbCrLf" + msg2;     window.execScript("anser = MsgBox('" + allMsg + "',vbYesNoCancel,'確認')","VBScript"); } としているのですが、 VBScriptの改行の"vbCrLf"が文字列扱いとなり、以下のようにそのまま出力されてしまいます。 「次のページへ移ります。vbCrLfよろしいですか?」 ※VBのChr$(13) & Chr$(10)やChr(13) & Chr(10)でも試しましたが同じ結果です。 対処法をご存知の方がおりましたら、ご回答お願い致します。

  • SSIをJavascriptの変数に割り当てる方法

    はじめまして!JavaScriptで質問があります。 JavaScriptで質問があります。 以下のようなwindowを生成し、HTMLを出力するJavaScriptコードをJSファイルとして登録し、 <script type="text/javascript" src="..."></script> で参照しています。 JSファイル内の[[ここに改行コード]]はSSIファイルを読み込んでいます。 SSIファイルの内容は改行コード、"(ダブルクォーテーション)を含んでいます。 この場合win.document.write(に続く'(シングルクォーテーション)で囲った文字列が改行してしまうので、 JavaScriptエラーとなってしまいます。 このエラーを解決できる手段はないでしょうか。 ↓JSファイル ---------------------------------- function windowOpen() { var win; win = window.open(); win.document.write('<html><head><title>title</title></head><body>[[ここに改行コード]]</body></html>'); } ---------------------------------- function内で以下のようにコメントを出力し、windowOpenの関数のコードを読み取ることができれば、 windowOpenCommentStart~windowOpenCommentEndまでの文字を切り取り、変数に代入することができる のですが、関数のコードを取得することなんてできませんよね。。 ---------------------------------- function windowOpen() { /* windowOpenCommentStart [[ここに改行コード]] windowOpenCommentEnd */ var win; win = window.open(); win.document.write('<html><head><title>title</title></head><body>' + [[ここに改行コードを変数化]] + '</body></html>'); } ---------------------------------- JSファイル内に[[ここに改行コード]]を出力することが条件ですが、 どんな方法でもよいので実現する方法はないでしょうか。 環境:WindowsXP ブラウザ:IE6,FireFox2

  • Javascriptのエレガントな書き方。

    javascriptで 次のような関数を作りたいのですが、エレガントに行う方法が知りたいです。 引数で数値0ならば、 0001という文字列 250なら 0250 12345なら 12345と文字列を返すものです。 また、皆さんのJavascript攻略方法も知りたいです。 最近プロトタイプとかいう言葉が出てきて、正直?状態です。

  • JavaScriptの表示についておねがいします。

    JavaScriptで、以下のスプリクトのページを表示する部分を10秒ごとにしたいのですがどなたか教えて頂けないでしょうか?出来れば、追記して回答お願いします。 <html> <body> </scr ipt> </head> <body onLoad="openWindow1()"> <a href="javascript:openWindow1();">web表示</a> <SCRIPT language="JavaScript"> <!-- // サブウィンドウの表示方法を指定する function openWindow1() { window.open("http://yahoo.co.jp/","1"); window.open("http://www.google.co.jp/","2"); window.open("http://ja.wikipedia.org/wiki/メインページ","3"); } //--> </SCRIPT> </body> </html>

専門家に質問してみよう