Возможно ли, что iframe изменит размер без помощи главного окна?

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

Я также не знаю идентификатор iframe, который назначен ему в главном окне. И я не хочу использовать jquery или любую другую инфраструктуру для него.

Ответ 1

Вы также можете сделать это, не зная id iframe в родительском окне:

window.frameElement.style.width = iframeContentWidth + 'px';
window.frameElement.style.height = iframeContentHeight + 'px';

См. frameElement в MDN.

ИЗМЕНИТЬ

На всякий случай, если iframe находится в контейнере, который имеет фиксированный размер и overflow: hidden, вы можете сделать что-то вроде этого:

function resizeIframe (iframeContentWidth, iframeContentHeight) {
    var container = window.frameElement.parentElement;
    if (container != parent.document.body) {
        container.style.width = iframeContentWidth + 'px';
        container.style.height = iframeContentHeight + 'px';
    }
    window.frameElement.style.width = iframeContentWidth + 'px';
    window.frameElement.style.height = iframeContentHeight + 'px';
    return;
}

Ответ 2

Для контента такого же происхождения, как ваш, да, вы можете.

Заимствовать у Гэри ответ на вышеупомянутый вопрос:

В iframe window.parent ссылается на глобальный объект родителя документ, а не сам объект документа. Я считаю, что вам нужно будет используйте parent.document.getElementById

Попробуйте получить доступ к iframe, используя parent.document, и посмотрите, разрешает ли это вам проблему.

Ответ 3

Предполагая, что у вас есть только 1 IFRAME в главном окне, из Javascript документа IFRAME вы можете сделать что-то вроде:

function getMySelf()
{
    return (window.parent.document.getElementsByTagName("iframe"))[0];
}

var myself = getMySelf();
myself.style.width = whateverWidth;
myself.style.height = whateverHeight;