Вы не можете глобализировать переменные / функции, пересекающие окна / фреймы таким образом.Каждое окно / iframe имеет свою собственную глобальную область видимости, и для назначения переменных / функций в другом окне / iframe вам необходим явный код доступа и соответствие той же политике происхождения .Доступны только переменные / функции внутри глобальной области видимости windows / iframes.
код в верхнем окне.
var iframe = document.getElementById('iframeId');
var iframeContext = iframe.contentWindow || iframe;
// this will only work if your iframe has completed loading
iframeContext.yourFunction();
Вы также можете определить функции / переменные в верхнем окне и просто работатьв одной области, связывая вещи, которые вам нужны, от iframe до замыкания.Опять же, при условии, что вы соответствуете той же политике происхождения.Это не будет работать в междоменном коде.
в iframe.
var doc = document;
var context = this;
top.myFunction = function(){
// do stuff with doc and context.
}
Также важно отметить, что вам нужно проверить, полностью ли загружены ваш контент iframe и его сценарии.Ваша верхняя страница / окно будет по неосторожности завершена и запущена до того, как будет создан контент iframe, поэтому переменные / функции ergo могут быть еще не объявлены.
Что касается раскрытия приватной функции, то другие это заметили, но скопировали / вставилидля полноты.
var fnB;
var fnA = function(){
var msg = "hello nurse!";
fnB = function(){
alert(msg);
}
}
У меня есть привычка объявлять автономные функции в качестве переменных (выражение функции) и использовать только операторы функций для обозначения конструкторов / псевдоклассов.Это также позволяет избежать нескольких возможных смущающих ошибок. В любом случае, fnB находится в глобальной области видимости iframe и доступен в верхнем окне.
Почему именно вы хотите, чтобы это меня било, кажется, это делает вопросы более важнымисложно отладить или обновить несколько месяцев спустя.