Имеют ли фреймы и фреймы отдельный контекст javascript? - PullRequest
8 голосов
/ 21 ноября 2011

Я провел несколько экспериментов в Chrome, но не уверен, поэтому мне нужно подтверждение:

Правильно ли я считаю, что iframes и фреймы имеют отдельный контекст JavaScript, что делает невозможным совместное использование переменныхмежду этими кадрами / iframes?

Для упрощения, давайте предположим, что клиент всегда будет одной и той же версией Chrome (это мой случай)

Ответы [ 4 ]

9 голосов
/ 21 ноября 2011

Да.

Однако вы можете использовать коллекцию frames или parent для доступа к другим фреймам (при условии, что они принадлежат одному домену).

7 голосов
/ 21 ноября 2011

Это не «невозможно» делить значения между кадрами, но вы должны быть осторожны.В Internet Explorer следующий сценарий приведет к ошибке:

  1. Создание объекта JavaScript в кадре A.
  2. Передача объекта JavaScript в функцию в кадре B, которая сохраняетзначение где-то (в кадре B)
  3. Кадр A перезагружается с новой страницей
  4. Код в кадре B пытается ссылаться на сохраненный объект из (бывшего) кадра A.

Internet Explorer не нравится, когда ссылаются на объект с несуществующей страницы.

5 голосов
/ 21 ноября 2011

Ну, у них просто разные глобальные объекты и глобальная область видимости. Однако, если они находятся в одном домене, вы можете запускать код в одном из другого. Но если бы вы сделали это (внутри родительского окна):

document.getElementById( "myiframe" ).contentWindow.window.globalArray = [];

, который создает глобальную переменную globalArray внутри глобальной области видимости iframe.

и затем внутри фрейма

console.log( globalArray instanceof Array );

вернет false, потому что Array ссылается на конструктор iframe Array. Вы должны сделать

console.log( globalArray instanceof top.Array );

где top относится к глобальному объекту окна контейнера.

jsfiddle: http://jsfiddle.net/EFbtN/

1 голос
/ 21 ноября 2011

Разделение контекста не между кадрами, а между доменами.Это означает, что если вы загружаете кадр A с доменом A и кадр B с доменом B, JavaScript из кадра A не может получить доступ к контексту домена B.Проверьте this для более подробного объяснения.

EDIT: Конечно, если они находятся в одном домене, ответ, предоставленный SLaks, полностью применяется.

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