電子書籍の厳選無料作品が豊富!

はじめまして!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

A 回答 (3件)

> 関数のコードを取得することなんてできませんよね。



関数の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なら楽なのですが・・・。)

この回答への補足

ありがとうございます!toString()ですかなるほど。

>FirefoxやOperaはダメでした><;
残念です。もう少しなんですが。。

>確認なのですが、SSIはJSファイル内であることが前提ですか?(HTML側でOKなら楽なのですが・・・。)

そうですよね。それなら楽なんですけどね
JSファイル内であることが前提です。

補足日時:2007/08/25 10:27
    • good
    • 0
この回答へのお礼

お礼にするの忘れてました

ありがとうございます!toString()ですかなるほど。

>FirefoxやOperaはダメでした><;
残念です。もう少しなんですが。。

>確認なのですが、SSIはJSファイル内であることが前提ですか?(HTML側でOKなら楽なのですが・・・。)

そうですよね。それなら楽なんですけどね
JSファイル内であることが前提です。

お礼日時:2007/08/25 10:45

JSファイル内への出力が前提ならば「SSIファイルの内容」をその前提に合わせて書き換えるしかないと思います。


そのSSIが単純includeではなくプログラム出力されているならば、SSI側プログラムで改行コードや引用符を置き換えればいいだけですけど。
#execが使えるSSIならば、置き換え用プログラムを間に挟めばよいでしょう。
単純includeしか使えないならば、読込対象ファイルの方を先に書き換えるしかないです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/27 15:45

よくわかりませんが、


document.write('\n');
とか
document.write('<br>');
ではだめですか?

この回答への補足

回答ありがとうございます。

外部ファイルの内容をシングルクォーテーションで囲った箇所に当てはめるので、そのままではエラーとなってしまいます。

document.write('[[外部ファイル]]');

document.write('あいうえお
かきくけこ
さしすせそ');

この場合改行コードがそのままJavaScriptのコードに埋め込まれてしまうので、エラーとなるんです。(;;)

もうあきらめようかな。。

補足日時:2007/08/25 16:43
    • good
    • 0

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