Avant la question, laissez-moi vous préface avec le fait que je travaille sur un projet très atypique. Je ne suis pas concerné par la sécurité ou les implications de plusieurs navigateurs. J'utilise une construction personnalisée du projet Chromium.Déterminez quel cadre (nom) a appelé une fonction en JavaScript
Ma question est, si j'appelle une fonction d'un espace de noms différent, comment puis-je déterminer l'espace de noms d'origine?
Par exemple, permet de dire que j'ai trois cadres:
1. window
-> 2. frame1 //is a child of window
-> 3. frame2 //is a child of window
Maintenant, permet de dire que certains JavaScript au sein window
a une fonction appelée doStuff()
, que je donne frame1
et frame2
accès à en allant:
var localDoStuff = top.doStuff;
Dans la fonction doStuff
, est-il un moyen pour moi de déterminer lequel de frame1
et frame2
l'a appelé? i.e: Si j'appelle localDoStuff
dans la portée de frame1
, puis-je obtenir l'objet fenêtre DOM de frame1
dans la portée de doStuff
?
Si j'utilise arguments.callee.caller
, il me donne la représentation sous forme de chaîne de la fonction qui l'a appelé. Cependant, je veux obtenir la portée dans laquelle cette fonction a été définie.
I do avoir accès à la source du navigateur si quelqu'un a une bonne, idée orientée de la façon de modifier le navigateur afin de permettre cela.
Collé des commentaires: Je suis émulez essentiellement un système d'exploitation qui exécute plusieurs applications. Chacune de ces applications est un iframe qui a accès à une API définie dans le cadre parent des applications. Disons que cette API a la fonction requestFocus() - aucun argument autorisé, tel que défini dans la spécification de l'API que j'implémente. Afin de donner le bon focus iframe, je devrais savoir quelle iframe a appelé la fonction requestFocus. Je sais que ce n'est pas une situation idéale - je n'ai pas écrit les spécifications API, malheureusement ...
Merci pour votre aide, je sais que c'est une question vraiment étrange.
Il y a beaucoup de hacks je peux penser, mais cela ne semble pas logique ... Pourquoi aurait-vous besoin de savoir quel cadre a appelé? Si vous avez besoin de l'objet fenêtre, vous devez le passer avec vos appels. –