アプリ版:「スタンプのみでお礼する」機能のリリースについて

ボタンを押したらjQueryが使えるページを新規で開くように以下のようなソースを書いてみました。

-----------------------------------------------------------------------------------------
<input type="button" value="test" onclick="test()" />

<script type="text/javascript">
function test(){
var newWindow=window.open();
newWindow.document.open();
newWindow.document.writeln('<p>test</p>');
newWindow.document.writeln('<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"><\/ …
newWindow.document.writeln('<p>test</p>');
newWindow.document.writeln('<p>test</p>');
newWindow.document.writeln('<p>test</p>');
newWindow.document.close();
}
</script>
-----------------------------------------------------------------------------------------
ところが、これだとOperaではうまくいきません。

「要素を検証」してみたところ、</script>以下がwritelnされていないようです。

src="~" の~部分を消してみると以下はきちんと書き込まれるのですが、それだとjsファイルを読み込むことができません。

</script>以外にもエスケープさせねばいけない所があるのでしょうか?
それとも原因は他にあるのでしょうか?

教えていただければありがたく思います。

よろしくお願いします。

A 回答 (3件)

なぜエスケープ?



newWindow.document.writeln('<script ・・・・><'+'/script>');
のようにタグを分割するだけでよいかも
    • good
    • 0
この回答へのお礼

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

wite(ln)の中に</script>を書くと、その外側の<script>が閉じられてしまうので、
対応法として、おっしゃる通りタグを分けるのと、「</」を「<\/」とエスケープにする2通りがあります。

で、いろいろ検証してみたところ、私のOperaはver11.60で、そのどちらの方法もうまくいきませんでした(src=""がなければ大丈夫ですが、、、)

ところが、ver11.51ではうまくいきました。

Operaのバグかもしれません。

どうなんでしょう?

お礼日時:2011/12/21 18:11

XHTMLなら <>& をエスケープする必要がありますが、document.write を使っているので関係なさそうですね。



document.write(['\x3Cp\x3Etest\x3C/p\x3E',
'\x3Cscript type="text/javascript" src="jquery-latest.min.js"\x3E\x3C/script\x3E',
'\x3Cp\x3Etest\x3C/p\x3E',
'\x3Cp\x3Etest\x3C/p\x3E',
'\x3Cp\x3Etest\x3C/p\x3E'].join(''));

> ところが、これだとOperaではうまくいきません。
そもそも、window.open() が働いていないように見受けられます。(Opera 11.60で確認)
http://jsfiddle.net/GBBdD/
window.open は引数なしで呼び出せる仕様ですが、Opera は準拠してないようですね。引数を指定してみてください。
http://www.whatwg.org/specs/web-apps/current-wor …

> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"><\/ …
http://code.jquery.com/jquery-latest.min.js を読むということは最新の jquery.js 仕様に準拠するよう常に気を配る必要がありますが、大丈夫でしょうか?
予期せぬ更新で既存のスクリプトが動かなくなるリスクがありますが…。
    • good
    • 0
この回答へのお礼

ありがとうございます!

jQueryのバージョンは、サンプルなので、気にしないでください(^^;

>window.open は引数なしで呼び出せる仕様ですが、Opera は準拠してない
んですか。それは知りませんでした。ありがとうございます。

お礼日時:2011/12/22 12:18

#2 です。



ポップアップブロックの可能性も考えましたが、やはり Opera 11.60 では動作しないようですね。
http://jsfiddle.net/GBBdD/1/
第二引数まで指定してやれば Opera 11.60 でも動作しました。
http://jsfiddle.net/GBBdD/2/

ただし、アドレスバーの表示がおかしい。
"about:blank" であるべきなのに "http://fiddle.jshell.net/GBBdD/2/show/" と表示されています。
何なんでしょうね…。
    • good
    • 0
この回答へのお礼

ありがとうございます!

>第二引数まで指定してやれば Opera 11.60 でも動作しました。
http://jsfiddle.net/GBBdD/2/

確かに動きました!ありがとうございます。

それにしても、またバージョンアップで変わりそうな気がしますが、、、(^^;

お礼日時:2011/12/22 12:19

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