• ベストアンサー

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

専門家に質問してみよう