Установите переменную в Iframe - PullRequest
3 голосов
/ 05 июля 2010

Можно ли создать Iframe, используя document.createElement("iframe");, а затем установить переменную в объекте окна iframe, например, в пространстве имен?

Я попытался сделать что-то вроде этого:

var Namespace = {}; 
var iframe = document.createElement("iframe"); 
iframe.src = "page.html"; 
document.body.appendChild(iframe);
var iwin = iframe.contentWindow || iframe.contentDocument.defaultView; 
iwin.Namespace = Namespace;

Но в page.html я пытаюсь войти Namespace, и он выдает неопределенную ошибку.

Ответы [ 2 ]

5 голосов
/ 05 июля 2010

Политика того же происхождения, вероятно, блокирует вас от этого.Это также может произойти в некоторых браузерах, если обе страницы используют схему file: // uri.

Если iframe и внешние окна будут использовать один и тот же домен, эта проблема должна исчезнуть, как только ваш код окажется всервер.Попробуйте отправить его с локального хоста, используя apache для проверки, или протестируйте его с помощью Google Chrome с отключенной политикой того же происхождения, как показано в этом сообщении:

Отключите ту же политику происхождения в Chrome

С другой стороны, если iframe должен находиться в другом домене или для работы со схемой file: // uri, вам нужно будет использовать какой-то обходной путь.

Один из способов передачи данных в iframe в другом домене - через идентификатор фрагмента в атрибуте src элемента iframe, который будет отображаться в свойстве hash объекта location 'окна' окна iframe;например:

Наружная страница:

<!doctype html>
<html><head></head><body>
<script>
  var Namespace = {foo:1, bar:2}; 
  var iframe = document.createElement("iframe"); 
  iframe.src = "frame.html#" + JSON.stringify(Namespace);
  document.body.appendChild(iframe);
</script>
</body></html>

Внутренняя страница "frame.html":

<!doctype html>
<html><head></head><body>
<a href="#" onclick="alert(location.hash.substring(1))">click me</a>
</body></html>
0 голосов
/ 05 июля 2010

document.appendChild (iframe);

Я уверен, что вам нужно добавить созданный вами узел в DOM.

...