można zrobić coś takiego:
var theWindow = window.open('http://stackoverflow.com'),
theDoc = theWindow.document,
theScript = document.createElement('script');
function injectThis() {
// The code you want to inject goes here
alert(document.body.innerHTML);
}
theScript.innerHTML = 'window.onload = ' + injectThis.toString() + ';';
theDoc.body.appendChild(theScript);
To także wydaje się działać:
var theWindow = window.open('http://stackoverflow.com'),
theScript = document.createElement('script');
function injectThis() {
// The code you want to inject goes here
alert(document.body.innerHTML);
}
// Self executing function
theScript.innerHTML = '(' + injectThis.toString() + '());';
theWindow.onload = function() {
// Append the script to the new window's body.
// Only seems to work with `this`
this.document.body.appendChild(theScript);
};
A jeśli z jakiegoś powodu chcesz użyć eval:
var theWindow = window.open('http://stackoverflow.com'),
theScript;
function injectThis() {
// The code you want to inject goes here
alert(document.body.innerHTML);
}
// Self executing function
theScript = '(' + injectThis.toString() + '());';
theWindow.onload = function() {
this.eval(theScript);
};
co to (wyjaśnienie dla pierwszego kawałka kodu. Wszystkie przykłady są dość podobne):
- Otwiera nowe okno
- Pobiera odwołanie do Tworzy nowe okno na
document
- elementu SCRIPT
- Miejsca cały kod chcesz „wstrzyknąć” do funkcja
- Zmienia skrypt
innerHTML
w celu załadowania wspomnianej funkcji po załadowaniu okna , przy zdarzeniu (można także użyć addEventListener
). Dla wygody użyłem toString()
, więc nie musisz łączyć wielu ciągów. toString
zasadniczo zwraca całą funkcję injectThis
jako ciąg znaków.
- Dołącza skrypt do nowego okna: , w rzeczywistości nie zostanie dołączony do załadowanego dokumentu, dołącza go przed załadowaniem (do pustego obiektu), dlatego należy użyć
window.onload
, aby Twój skrypt może manipulować nowym dokumentem.
To chyba dobry pomysł, aby użyć window.addEventListener('load', injectThis.toString());
zamiast window.onload
, w przypadku jeśli masz już scenariusz w swojej nowej stronie, która używa zdarzenia window.onload
(że to nadpisać skrypt wtrysku).
pamiętać, że można zrobić coś wewnątrz funkcji injectThis
: dołączanie div wykonaj zapytania DOM, dodać jeszcze więcej skryptów, itp ...
Należy również pamiętać, że można manipulować w nowym oknie DOM wnętrza theWindow.onload
zdarzenie, używając this
.
Nie działa w IE11. – Suncatcher
Działa na FF. Chrom? Nie. –