Установить переменную в родительском окне из iframe - PullRequest
44 голосов
/ 19 августа 2009

У меня есть родительский документ со встроенным фреймом. Внутри фрейма у меня есть поле для загрузки. Как только пользователь выбирает файл для загрузки, я запускаю событие изменения jQuery. В этом случае я хочу установить для переменной в родительском окне значение true, чтобы родитель знал, что загрузка началась.

Кто-нибудь знает, как это сделать?

Пробовал это, но не сработало:

var test;
$("#newsletter_email").change(function() {
  parent.window.test = true;

});

$('#send').click(function() {
    if (test) {
        alert('File has been uploaded!');
    } else {
        alert('You need to upload a file');
    }
});

Ответы [ 2 ]

84 голосов
/ 19 августа 2009

Переменные в глобальной области видимости автоматически выставляются как свойства DOM их содержащего window объекта.

Это означает, что

var foo = 'bar';

аналогично

window.foo = 'bar';

Это означает, что вы можете прочитать глобальную область действия любого window объекта, на который вы можете получить ссылку. Здесь мы также можем подразумевать, что использование window является неявным . Даже если вы не ввели явно «окно», оно все равно есть.

А поскольку сами фреймы также автоматически выставляются как свойства DOM текущего window объекта, это означает, что вы можете получить доступ и к любому другому объекту window кадров.

Свойство parent объектов window содержит ссылку на объект window родительского объекта этого окна (если оно есть). Поскольку у iframes наверняка есть родительское окно, то все, что я только что набрал, сводится к этому

// set the global variable 'foo' in the parent global scope
parent.foo = 'bar';
3 голосов
/ 23 апреля 2013

Вы также можете сохранить его в localStorage, а также читать и писать из него, при условии, что и основной документ, и iframe совместно используют один домен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...