Прежде чем задать вопрос, позвольте мне предисловие к этому факту, что я работаю над очень нетипичным проектом. Меня не интересуют проблемы безопасности или кросс-браузер. Я использую пользовательскую сборку проекта Chromium.Определите, какой кадр (имя) называется функцией в JavaScript.
Мой вопрос: если я вызываю функцию из другого пространства имен, как определить исходное пространство имен?
Например, предположим, что у меня есть три кадра:
1. window
-> 2. frame1 //is a child of window
-> 3. frame2 //is a child of window
Теперь, позволяет сказать, что некоторые JavaScript в window
имеет функцию под названием doStuff()
, что я даю frame1
и frame2
доступ к перейдя:
var localDoStuff = top.doStuff;
Внутри функции doStuff
, есть ли способ определить, какой из frame1
и frame2
назвал его? i.e: Если я вызываю localDoStuff
в рамках frame1
, могу ли я получить объект окна DOM frame1
в рамках doStuff
?
Если я использую arguments.callee.caller
, он дает строковое представление функции, которая его вызывала. Тем не менее, я хочу получить область , в которой эта функция была определена.
I У есть доступ к источнику браузера, если у кого есть хорошая, направленная идея о том, как изменить браузер, чтобы это разрешить.
Pasted от комментариев: я в основном эмулирует операционную систему, которая работает несколько приложений. Каждое из этих приложений представляет собой iframe, который имеет доступ к API, определенному в родительском фрейме приложений. Предположим, что у этого API была функция requestFocus() - без аргументов, как определено в спецификации API, которую я реализую. Чтобы дать правильный фокус iframe, я должен был бы знать, какой iframe называется функцией requestFocus. Я знаю, что это не идеальная ситуация - я не писал спецификации API, к сожалению ...
Спасибо за вашу помощь. Я знаю, что это действительно странный вопрос.
Есть много хаков, о которых я могу думать, но это, похоже, не имеет смысла ... Зачем вам нужно знать, какой кадр назвал его? Если вам нужен объект окна, вы должны пройти его с помощью своих вызовов. – 2010-11-23 01:07:59