JavaScript - динамическое изменение размера междоменного домена iframe с использованием фрагмента URL - PullRequest
1 голос
/ 18 апреля 2011

Я нашел метод , который документирует междоменную связь с iframes , и я решил, что попробую использовать это для достижения высокой цели - заставить iframe автоматически изменять размер при изменении содержимого изменить.

По сути, вот мой план (я знаю, что это немного глупо).

  • У меня есть контроль как над родительской страницей, так и над дочерней страницей, но они будут загружаться в разные домены (и фактически один будет http, а другой https).

  • Внутри iframe у меня есть функция, которая будет запускаться при загрузке документа, а затем периодически после этого, чтобы получить высоту документа, и установить ее в качестве значения фрагмента URL (то есть что-то вроде https://blahblah.com/#h-768)

  • В родительском окне у меня есть функция, которая будет периодически проверять URL-адрес iframe, захватывать хеш-тег, анализировать высоту и соответствующим образом изменять высоту iframe.

Большая загвоздка заключается в следующем: у iframe нет идентификатора или имени, связанного с ним, , и я, вероятно, не могу это изменить.

В действительности, iframe изначально будет находиться в том же домене. Он будет использовать document.write для создания функции опроса iframe в родительском окне (потому что я фактически солгал раньше, когда сказал, что у меня есть контроль над родительской страницей), а затем он перейдет на страницу, на которой я на самом деле интересует.

Итак, настоящий вопрос в том, как может iframe дать себе имя или идентификатор ?

Я пробовал такие вещи (используя jQuery):

$(document).ready(function() {
        // Try changing the name            
        $(self).attr("name", "myframe");
        $(self).attr("id", "myframe");      
});

Проблема в том, что она не работает.

Есть мысли?

ПОЯСНЕНИЯ

Родительская страница будет выглядеть примерно так: http://mysite.com,, а iframe будет изначально , будет http://mysite.com/iframe.

Эта начальная страница iframe является просто фиктивной страницей, которая:

  • Дает элемент
  • Создает новый элемент на родительской странице, который выполняет опрос изменения размера, а затем
  • ли window.location = "http://my-real-app-location.com"

На новой странице будет обновлен фрагмент URL с текущей высотой, в результате чего URL-адрес iframe будет выглядеть примерно так: http://my -real-app-location.com / # h-800 (это означает, что Высота документа - 800 пикселей.)

Скрипт, который фиктивная страница, созданная на родительской странице, должна захватить этот фрагмент URL и соответствующим образом изменить высоту iframe.

Ответы [ 4 ]

0 голосов
/ 13 мая 2011

Хорошее междоменное решение, если вы ищете здесь, - А сделал целый пост исследования

Еще один междоменный iframe изменяет размер Q & A

0 голосов
/ 18 апреля 2011

Окно / документ iframe не может устанавливать атрибуты для своего собственного тега контейнера, так как этот тег принадлежит родительскому документу. Тег сам по себе не имеет ничего общего с окном и документом, загруженным в него.

Если вам нужен атрибут id, вы должны установить его из родительского документа, и нет никакого способа обойти его.

0 голосов
/ 19 апреля 2011

Ну, вот код, который я искал изначально. Это даст элементу

var foundMyself = false;
$("iframe", parent.document).each(function() {
    if (this.contentWindow == self) {
        $(this).attr("id", "myframe");  
            foundMyself = true; 
    }
});

Ниже приведен код, который я использую для создания соответствующего тега сценария на родительской странице (имейте в виду, что мое приложение устанавливает фрагмент # h-xxxxx, обозначающий высоту страницы):

if (foundMyself) {
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.text = "function resizeApp() { var app = document.getElementById(\"myframe\"); var hash = app.contentWindow.location.hash; app.style.height = hash.substring(3); } setInterval('resizeApp();', 500);";

    parent.document.body.appendChild(script);
}

window.location = "https://my-app-real-location.com"

Новая проблема, с которой я сейчас сталкиваюсь, заключается в том, что после того, как iframe ушел, я не могу получить доступ к свойству contentWindow.

0 голосов
/ 18 апреля 2011

Ну, в конечном итоге родительская страница будет контролировать URL-адрес iframe.Iframe не может обновить ничего, кроме своего URL.

При этом я не уверен, что понимаю проблему.Почему вы не можете дать ID iframe при его создании?

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