これがテストケースです。
JavaScript の使用:
$('.js').on('click', function () {
var newwindow = window.open();
newwindow.document.write('<span>test</span>');
newwindow.document.write('<scr' + 'ipt>alert(1)</scr' + 'ipt>');
});
これにより、期待どおりの結果が得られます。ダイアログ アラートが新しいウィンドウ内に表示されます。
jQuery の使用:
$('.jquery').on('click', function () {
var newwindow = window.open();
$(newwindow.document.body).append('<span>test</span>', '<scr' + 'ipt>alert(1)</scr' + 'ipt>');
});
ダイアログアラートはメインページ内に表示されます。
違いはなぜですか?ここで何か不足していますか?
この動作は、chrome/FF/safari/IE でテスト済みです。
編集
mishikが指摘したように、これはglobalEval
、グローバル コンテキストでスクリプトを実行するメソッドを使用して、jQuery がスクリプト タグを処理する方法によるものです。したがって、jQuery を使用するための可能な回避策 (ただし、純粋な JavaScript メソッドにフォールバックしない) はnewwindow
、グローバル コンテキストでも変数を設定し、そのように使用することです。
$('.jquery').on('click', function () {
newwindow = window.open();
$(newwindow.document.body).append('<span>test</span>','<scr' + 'ipt>newwindow.window.alert(1)</scr' + 'ipt>');
});