• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • susie-t
  • ベストアンサー率86% (37/43)
回答No.1

> 関数のコードを取得することなんてできませんよね。。 関数のtoStringメソッドを使えばいちおう取得できます。 ただし、IEならコメントも取得できるのですが、 FirefoxやOperaではコメント部分が取得できないため、 この方法では実現できません・・・。(改行や空白も消える。) いちおう、提示されている案を実現しようとすると以下のようになります。 -------------------------------------- <html> <head> <script> function srcFromSSI(){ /* windowOpenCommentStart AAAAAAA AAAAAAA AAAAAAA windowOpenCommentEnd */ } function windowOpen() { var win; win = window.open(); var funcSrc = srcFromSSI.toString(); var match = funcSrc.match(/windowOpenCommentStart((?:.*?\r\n)*?.*?)windowOpenCommentEnd/); var src = (match != null) ? match[1] : ""; win.document.write('<html><head><title>title</title></head><body>' + src + '</body></html>'); } </script> </head> <body> <button onclick="windowOpen();">TEST</button> </body> </html> ---------------------------------------- TESTボタンを押すとIEならサブウィンドウに文字が表示されます。が、FirefoxやOperaはダメでした><; もう少し考えてみます。 確認なのですが、SSIはJSファイル内であることが前提ですか?(HTML側でOKなら楽なのですが・・・。)

hokuro777
質問者

お礼

お礼にするの忘れてました ありがとうございます!toString()ですかなるほど。 >FirefoxやOperaはダメでした><; 残念です。もう少しなんですが。。 >確認なのですが、SSIはJSファイル内であることが前提ですか?(HTML側でOKなら楽なのですが・・・。) そうですよね。それなら楽なんですけどね JSファイル内であることが前提です。

hokuro777
質問者

補足

ありがとうございます!toString()ですかなるほど。 >FirefoxやOperaはダメでした><; 残念です。もう少しなんですが。。 >確認なのですが、SSIはJSファイル内であることが前提ですか?(HTML側でOKなら楽なのですが・・・。) そうですよね。それなら楽なんですけどね JSファイル内であることが前提です。

その他の回答 (2)

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.3

JSファイル内への出力が前提ならば「SSIファイルの内容」をその前提に合わせて書き換えるしかないと思います。 そのSSIが単純includeではなくプログラム出力されているならば、SSI側プログラムで改行コードや引用符を置き換えればいいだけですけど。 #execが使えるSSIならば、置き換え用プログラムを間に挟めばよいでしょう。 単純includeしか使えないならば、読込対象ファイルの方を先に書き換えるしかないです。

hokuro777
質問者

お礼

そうですよね。おっしゃるとおりだと思います。 これはSSIファイルの内容をJavaScriptで読み込む前提として作成するようにします。 ありがとうございます。

回答No.2

よくわかりませんが、 document.write('\n'); とか document.write('<br>'); ではだめですか?

hokuro777
質問者

補足

回答ありがとうございます。 外部ファイルの内容をシングルクォーテーションで囲った箇所に当てはめるので、そのままではエラーとなってしまいます。 document.write('[[外部ファイル]]'); ↓ document.write('あいうえお かきくけこ さしすせそ'); この場合改行コードがそのままJavaScriptのコードに埋め込まれてしまうので、エラーとなるんです。(;;) もうあきらめようかな。。

関連するQ&A

  • JavaScriptのコードの間違いを教えて

    いつもお世話になっております。 現在、JavaScriptの勉強をしているのですが、if構文のところでつまずいてしまいした。 下のコードがうまく実行できません。 間違いを指摘して頂ければと思います。 <doctype! html> <html lang="ja"> <head>    <meta charset="UTF-8">    <title>Javascript</title> </head> <body> <script type="text/javascript">    var x = window.prompt("好きな値を入力してください","100");    if (x>100)       {window.document.write("100より大きいです");}    else {if(x<100))       {window.document.write("100より小さいです");}       else {if(x=100))          {window.document.write("100です");}       }    } </script> </body> </html> なお、テキストエディタで記述し、実行はGoogleChromeで行いました。 よろしくお願いします。

  • JavaScript内からJavaScriptを書き出したいのですが

    こんにちは. JavaアプレットとJavaScriptを利用してJavaScriptを書き出すコードを書いてみたのですが,うまく動きません.具体的なコードは以下のようで,リンクはできるのですが,マウスを乗せるとオブジェクトを指定してくださいとエラーがでます.innerHTMLでJavaScriptを書き出すことはできないのでしょうか? <html> ・・・ <body> <SCRIPT language="JavaScript" type="text/javascript"> <!-- function dWrite(){ str='<script type="text/javascript">functionLinkMo(){varLM1;LM1=window.open"","Doc","toolbar=no,location=no,kdirectories=no,width=300,height=250");LM1.document.write"<html><head><title></title></head><body>testです/body></html>");LM1.document.close();}</script><body>rinku <ahref="#"onMouseOver="LinkMo()">ここにのせると</a></body></html>'; document.getElementById("here").innerHTML=str;} //--> </script> <applet ・・・dWriteを呼び出す></applet> <div id="here" style="position:absolute;width:600px; left:0px;top:0px;"> </div></body></html>

  • javascriptで困っています。教えてください

    以下のようにjavascriptの内容を書いた外部のテキストファイルを読み込んで、実行しようとしているのですが、うまくいきません。普通にjavascriptを読み込むのは分かっているのですが、このような方法ができないのでしょうか?よろしくお願いします。 <!doctype html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> <div id="jsbox"></div> <script type="text/javascript"> var jsbox = document.getElementById("jsbox"); //非同期通信///////////////////////////////////////////// var xmlHttp; loadText(); function loadText(){ if (window.XMLHttpRequest){ xmlHttp = new XMLHttpRequest(); }else{ if (window.ActiveXObject){ xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }else{ xmlHttp = null; } } xmlHttp.onreadystatechange = checkStatus; xmlHttp.open("GET", "http://xxxxxxxxxxxx/js_test.txt", true); xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ var str = xmlHttp.responseText;alert(str); jsbox.innerHTML = str; test_js(); } } ///////////////////////////////////////////////////////////////// </script> </body> </html> テキストファイルをhttp://xxxxxxxxxxxx/js_test.txtに置き、テキストファイルの内容が <script type="text/javascript"> function test_js(){ alert("test"); } </script>

  • 変数を送る方法?(CGIの「**.cgi?mode=00&name=aa.jpg」的な物)

    1ページに複数の画像があり、画像クリックで拡大写真を小窓で開くようにしたいです。 枚数分ページ(htmlファイル)を準備するのは避けたいです。自動生成の方でやりたいと思います。 その際、少しでも入力を減らしたいと思うのですが… 現在は以下のようになっています。 --- <SCRIPT language="JavaScript"> <!-- function wopen1(){ wo1=window.open("","WindowOpen1", "width=800,height=700"); wo1.document.write("<html><head><title>画像名</title>"); wo1.document.write("<script language='JavaScript'>"); wo1.document.write("function good(){"); wo1.document.write("window.close() }"); wo1.document.write("</script>\n</head>\n<body>"); wo1.document.write("写真名-コメント"); wo1.document.write("<IMG src='写真パス'>"); wo1.document.write("<center>"); wo1.document.write("<form>"); wo1.document.write("<input type='button' name= 'ok ' value=' Close ' onClick='good()'>"); wo1.document.write("</form>"); wo1.document.write("</center>\n</body>\n</html>"); wo1.document.close(); } (これが写真枚数分) これと、 <A href="javascript:void(0)" onclick="wopen1()"><IMG src="サムネイルパス"~ これの組み合わせです。 これを、 wo1.document.write("<html><head><title>[CGIで言う所の$name的な表現]</title>"); と <A href="javascript:void(0)" onclick="wopen1([CGIで言う所の?name=00&pict=01.jpg的な表現])"><IMG src="写真サムネイルパス"~ で済ませたいのですが、可能でしょうか? その場合、どのように記述したらいいのでしょうか? 出来ればピンポイントで教えていただけるとありがたいのですが… よろしくお願いします。

  • Javascriptを使った隠しページ探しについて

    隠しページ探しのホームページを作っているのですが、 【index.html】と【fff.js】という2つのファイルで作っています。 【index.html】は <html><head><title>第1問</title><script src="fff.js"></script> </head> <body oncontextmenu="return false;" onkeydown="return false;"> ここに答えを入れて下さい。<br> <form name="ike"> <input type="text" name="nyu"><input type="button" value="回答" onclick="ikou()"> </form> </body></html> 【fff.js】は function ikou(){ var a = document.ike.nyu.value+'9'; if(a == 6){  if(a == 9){ document.write('次は379.htmlです。');  }else{  window.alert('はずれ'); }else{ window.alert('はずれ'); } (次は379.htmlです。の所は実際は暗号化) です。 fff.jsの書き換えを行って解く問題にしようと思っているのですが、エラーになってしまいます。 どこを直せばいいのでしょうか。

  • javascriptでのエラーについて

    Windows7+IE8にて以下の処理を行いたいのですが、 ================================================== (1) 親ウィンドウ(oya_window.html)から、【window.open】にて   子ウィンドウ(ko_window.html)を開く (2) 子ウィンドウ(ko_window.html)の【window.opener】にて   親ウィンドウ(oya_window.html)に定義されている   【window.open】を実行する関数[openWindow]を呼び出し、   Yahooページを開く ================================================== (2)の部分で以下のエラーとなり、Yahooページを開く事ができません。 --------------------------------------------------------- このWebページのエラーにより、正しく機能しない場合があります。 --------------------------------------------------------- タグが無効です。 oya_window.html   ライン:10 コード:0      文字:5 --------------------------------------------------------- 同マシン(Windows7)のfirefoxでは問題なく処理が行えるため、IEの 何らかの設定に起因していると思うのですが、IEの何の設定に起因して いるのかわからず、困っています。 何か情報をお持ちの方いらっしゃいましたら、よろしくお願いします。 【その他情報】 ○IEをアドオンなしで起動しても同エラーが発生することから、IEの  アドオンによる影響ではないと思われます。 ○以下の処理は問題なく実行できます。  ▼パターンA  ==================================================  (1) 親ウィンドウ(oya_window2.html)から、【window.open】にて    子ウィンドウ(ko_window2.html)を開く  (2) 子ウィンドウ(ko_window2.html)にて(元々親ウィンドウ    (oya_window.html)に定義していた)【window.open】を実行する    関数[openWindow]を呼び出し、Yahooページを開く  ==================================================  ▼パターンB  ==================================================  (1) 親ウィンドウ(oya_window3.html)から、【window.open】にて    子ウィンドウ(ko_window3.html)を開く  (2) 子ウィンドウ(ko_window3.html)の【window.opener】にて    親ウィンドウ(oya_window.html)に定義されている    【document.bgColor】を実行する関数[changeColor]を呼び出し    親ウィンドウの背景色を灰色に変更する  ================================================== 【ソース】 ▼本来のパターン ==親ウィンドウ(oya_window.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window.html","ko_window","status=yes,width=800,height=100"); } function openWindow(){ window.open("http://yahoo.co.jp","",""); } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.openWindow(); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">Yahooページを開く</a> </BODY> </HTML> ================================================== ▼パターンA ==親ウィンドウ(oya_window2.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window2.html","ko_window","status=yes,width=800,height=100"); } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window2.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.window.open("http://yahoo.co.jp","",""); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">Yahooページを開く</a> </BODY> </HTML> ================================================== ▼パターンB ==親ウィンドウ(oya_window3.html)=================== <HTML> <HEAD> <TITLE>親ウィンドウ </TITLE> <script language="Javascript"> function koopen(){ window.open("ko_window3.html","ko_window","status=yes,width=800,height=100"); } function changeColor(){ document.bgColor="CCCCCC"; } </script> </HEAD> <BODY> <a href="JavaScript:koopen();">子ウインドウを開く</a> </BODY> </HTML> ================================================== ==子ウィンドウ(ko_window3.html)=================== <HTML> <HEAD> <TITLE>子ウィンドウ </TITLE> <script language="Javascript"> function helpop(){ window.opener.changeColor(); } </script> </HEAD> <BODY> <a href = "JavaScript:helpop();">親ウィンドウの色を変える</a> </BODY> </HTML> ==================================================

  • javascriptが動かない

    javascript初心者です。 画面を三分割し、画面ロード時にそれぞれのフレームの位置を表示するという、サンプル的なのを作ったのですが、画面は分割されますが、上、左、右 ってのが表示されないです。 javascriptの記述の仕方が根本的に違いますかね? 下記に書いてあるのがそのソースコードです。 どなたかお願いします。 <html> <head> <title>FrameSample</title> <script type="text/javascript" > function frameinit(){ frames["top"].document.write("上"); frames["left"].document.write("左"); frames["right"].document.write("右"); } window.onload=frameinit; </script> </head>    <frameset rows="100,*">      <frame src="newpage4.html" name="top" >       <frameset cols="50,50">          <frame src="newpage4.html" name="left">         <frame src="newpage4.html" name="right">        </frameset>   </frameset> </html>

  • 外部ファイルを利用したい

    現在、Webの勉強を始めたのですが、自分でいろいろ作成していてうまくいかないので、教えて下さい。 htmlファイルが幾つかあるのですが、全てのページに同じテーブルタグを使用するので、JavaScriptの外部ファイルで書き出してそれぞれを各htmlファイルで呼び出そうと思っていますが、うまくいきません。 ★jsファイル/xx.js★ <SCRIPT language="JavaScript"><!-- document write("<table border='1'"); document write("<tr><td><img src='xx.gif'></td></tr>"); document write("</table>"); --> ★htmlファイルでの呼び出し★ <html> <head><title>外部ファイル呼び出し</title></head> <body><script language="JavaScript" src="xx.js"></script> </body></html> かなり素人なので変な書き方をしていると思いますが、ご指導お願いします。

  • javascriptでスタイルを動的に作成する方法

    javascriptで動的に新たにクラスを作成してスタイルを設定する方法を教えてください。 たとえば、 <html> <head> <style> .hoge { color: red; } </style> </head> <body></body></html> の<style>~</style>をjavascriptで記述するにはどう書けばよいでしょうか? もちろん、 document.write('<style> .hoge {color: red;}</style>'); では、<style>タグを埋め込むのと同じですので、純粋なjsのcodingをご教示ください。(prototype.jsなどのライブラリを使わない方法) よろしくお願いします。

  • 1ページに大量のWindow.openの最適化方法

    サムネイル下のボタンクリックで拡大写真表示をさせたいと思っています。 現在以下の方法です。 -------------------------- <SCRIPT language="JavaScript"> <!---------------------- function open1(){ wo1=window.open("","WindowOpen1", "toolbar=no,location=no,directories=no,status=no,menubar=yno,scrollbars=no,resizable=no,width=430,height=460"); wo1.document.write("<html><head><title>拡大写真</title>"); wo1.document.write("<script language='JavaScript'> "); wo1.document.write("function good(){ "); wo1.document.write(" window.close() } "); wo1.document.write("</script></head><body><center> "); wo1.document.write("<IMG src='img/03-02/001.jpg' border='0'> "); wo1.document.write("<br><form> "); wo1.document.write("<input type='button' name= 'ok ' value=' Close ' onClick='good()'>"); wo1.document.write("</form></center></body></html> "); wo1.document.close(); } //-----------------> これと <FORM><INPUT type="button" name="no1 " value=" 拡大写真 " onclick="open1()"></FORM> これの組み合わせ --------------------------- で、これがそのページに30個ほど必要なんです。 それぞれ違うのは、もちろん画像だけなんです。 function open1(){~~}を個数分書くしか方法は無いんでしょうか? 何か簡素化する方法があったらお願いします。