Javascript nel DOM ha una caratteristica peculiare. Esiste un diverso Object
oggetto che un oggetto (per impostazione predefinita) eredita per finestra.
Per trovare quale tipo di oggetto viene inviato a una funzione quando si può dare un oggetto da una finestra diversa, i metodi che ho letto per sapere cosa è stato dato sono l'uso della tipizzazione anatra e l'analisi del uscita di .toString()
. Dato che instanceof
è inutile.
La tipizzazione degli anatre viene eseguita controllando se esistono o esistono proprietà di un oggetto in una variabile e se hanno un valore di tipo determinato per confermare che un oggetto è effettivamente ciò che è previsto.
L'idea che voglio esplorare è un'alternativa a Duck-typing (anche se è più lenta) per ottenere il costruttore dell'oggetto reale per quando l'oggetto è uno degli oggetti predefiniti di javascript nel DOM (Object, Array, Element, Funzione, ecc ...)
per provare a ottenere la finestra che ha un certo oggetto e poi provare a lavorare da lì.
In altre parole ... C'è un modo per ottenere la finestra da dove è stato creato un oggetto in ogni momento (assumendo che l'oggetto sia un'istanza di Object
nella finestra in cui è stato creato)?
Se è così, allora come faresti questo controllo?
La mia idea attuale è di ottenere tutte le finestre nel documento principale come:
var windows = [window.top];
var iframes = document.getElementsByTagName('iframe');
for(var i = 0; i < iframes.length; i++){
windows.push(iframes[i].contentWindow);
}
E poi
function isATypeOfB(A, B){
for(var i = 0; i < windows.length; i++){
if(windows[i][A] && windows[i][A].prototype.isPrototypeOf(B)){
return true;
}
}
return false;
}
Ho già l'impressione che non funzioni a causa dell'accesso limitato "contentWindow" ai criteri dello stesso dominio. Inoltre, non mostro qui controlli per aggiornare l'array windows
quando il numero di iframe cambia o l'url di un iframe cambia.
L'obiettivo principale qui è quello di essere in grado di dire al costruttore di una certa istanza di oggetto che esiste in una variabile ha un determinato oggetto nella sua catena di prototipi. Ad esempio, per sapere se una variabile contiene un'istanza di Array
Quali sono le tue opinioni qui?