Вы не можете глобализовать переменные/функции пересекаются окна/IFrames таким образом. Каждое окно/iframe имеет свою собственную глобальную область действия и предназначено для целевых переменных/функций в другом окне/iframe, вам нужен явный код доступа и соответствует same origin policy. Доступны только переменные/функции внутри глобальной области данных 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.
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);
}
}
Я имею Habbit об объявлении автономных функций в качестве переменной (выражения функции), и только операторы используют функцию для обозначения конструкторов/псевдо-классов. Это также позволяет избежать нескольких возможных ошибок. В любом случае fnB находится в глобальной области iframe и доступен для верхнего окна.
Почему именно вы хотите, чтобы это меня било, кажется, что дело осложняется отладкой или обновлением через несколько месяцев.
Интересно, что вы ищете с помощью чего-то подобного с javascript? –
Amirouche - см. Разъяснение, которое я добавил к основному тексту вопроса ... –
Кстати, все замечают, что когда я столкнулся с этой проблемой, да, я просто де-вложил эту функцию и решил проблему:) Я просто любопытно с теоретической точки зрения. –