To jest the test case.alert() wywołany w nowym oknie wydaje się być wywołany z oryginalnej strony przy użyciu metod jQuery:
Korzystanie JavaScript:
$('.js').on('click', function() {
var newwindow = window.open();
newwindow.document.write('<span>test</span>');
newwindow.document.write('<scr' + 'ipt>alert(1)</scr' + 'ipt>');
});
daje to oczekiwanego rezultatu: alert dialogowe jest wyświetlane wewnątrz nowym oknie.
Korzystanie jQuery:
$('.jquery').on('click', function() {
var newwindow = window.open();
$(newwindow.document.body).append('<span>test</span>', '<scr' + 'ipt>alert(1)</scr' + 'ipt>');
});
Alert dialogowe pokazane wewnątrz stronie głównej.
Dlaczego różnica? Czy coś mi umyka?
Zachowanie to zostało przetestowane w chrome/FF/Safari/IE
EDIT
Jak podkreślił mishik, to ze względu na to, jak jQuery obsługuje tagi skryptu metodą globalEval
do uruchamiania skryptów w kontekście globalnym. Tak więc możliwe obejście przy użyciu jQuery (ale nie spaść z powrotem do czystego sposobu JavaScript) może być, aby ustawić zmienną w kontekście globalnym newwindow
zbyt i używać go tak, na przykład:
$('.jquery').on('click', function() {
newwindow = window.open();
$(newwindow.document.body).append('<span>test</span>','<scr' + 'ipt>newwindow.window.alert(1)</scr' + 'ipt>');
});
+1 Czy to jest powód, dlaczego ludzie mówią, jQuery jest szybszy niż javascript? – Praveen