Wenn Sie window.open
zu etwas anderem ändern, z. mit window.open = 'something else';
, dann bist du Shadowing die open
Methode aus dem Prototyp;
// Looking up window.open (in the prototype chain)....
window.open; // Found, result == 'something else'
window.__proto__.open; // Not accessible any more (shadowed by previous line)
Nach delete window.open
Aufruf 'something else'
zu löschen, wird die ursprüngliche Methode wieder sichtbar, weil sie nie von der Prototypkette verschwunden waren.
Aber wenn Sie die open
Methode auf dem Prototyp, z. window.__proto__.open = bogus;
, dann können Sie die alte Methode nicht einfach wiederherstellen. Also, um das „offenes Fenster“ Verhalten wieder, müssen Sie entweder einen Verweis auf die ursprüngliche Methode halten, bevor sie zu ersetzen,
var original_open = window.open;
window.__proto__.open = 'bogus';
// .... whatever ....
// Now restore it:
window.__proto__.open = original_open;
Oder leihen sie von einer anderen window
, z.B. unter Verwendung eines temporären neuen Rahmen:
var frame = document.createElement('iframe');
document.body.appendChild(frame);
window.__proto__.open = frame.contentWindow.open;
frame.parentNode.removeChild(frame);
Diese ganze Idee obwohl lächerlich ist: Sie sollte nicht brechen integrierten Methoden.
also nach 'Dokument .__ Proto __. CreateElement =" Schein ";' gibt es keine Hoffnung mehr? :-) – Owyn
@Owyn Es gibt viele Möglichkeiten, Frames zu erstellen: 'element.innerHTML = ..',' element.insertAdjacentHTML', 'document.createElementNS', um ein paar zu nennen –
@Owyn Zumindest in Chrome, wenn Sie löschen document .__ proto __. createElement es stellt es zurück auf nativ oder abwesend, wie zutreffend. – kbenson