Как предотвратить перезагрузку iframe при его перемещении в DOM

У меня есть iframe, загруженный некоторым контентом. Я хотел бы переместить его внутри DOM, не вызывая обновления (мне нравится содержимое внутри него, я хочу его сохранить).

Я делаю некоторые основные node.appendChild(iframe), чтобы выполнить работу.

Это возможно?

Заранее спасибо за помощь.


person Savageman    schedule 15.09.2011    source источник


Ответы (4)


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

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

person John Fisher    schedule 15.09.2011
comment
Нет, я не хочу перемещать его визуально. Так что то, чего я боялся, было правдой. Очень плохо. :'( - person Savageman; 15.09.2011
comment
Еще не тестировался в разных браузерах; но похоже, что вы можете переупорядочивать узлы, включая iframe, внутри одного родительского узла, не запуская обновление с помощью insertBefore(). например, iframe.parentNode.insertBefore(iframe, iframe.parentNode.firstChild); - person svidgen; 03.08.2013

Я так не думаю, так как браузер будет повторно отображать/перезагружать iframe, когда он будет возвращен в DOM.

http://polisick.com/moveNode.php объясняет это лучше.

Чтобы переместить узел, вы вызываете removeNode, чтобы вывести его из дерева в память, а затем appendNode, чтобы «вставить» его туда, куда вы хотите.

person Drazisil    schedule 15.09.2011
comment
Я не хочу его снимать и ставить обратно. Я просто хочу переместить его. - person Savageman; 15.09.2011
comment
Вот так и перемещается. То же, что буфер обмена. Вырезать/Вставить. - person Drazisil; 15.09.2011
comment
В порядке. Выглядит не оптимально, но я понятия не имею, как это работает, так что... Спасибо. - person Savageman; 15.09.2011

У меня была аналогичная проблема с iFrame в диалоговом окне jQueryUI. jQuery перемещает div (содержащий мой iFrame) из DOM, и, поскольку мне все еще нужны обратные передачи (дух), мне пришлось переместить его обратно. Прочитав этот и несколько других постов, я нашел решение.

Простая идея, которую я заметил, заключается в том, что iFrame перезагружается при перемещении. Итак, я добавил iFrame в диалоговый контейнер (div) после перемещения div обратно в DOM. Это работает, потому что jQuery не заботится о том, что находится в контейнере. Вот пример кода:

Функции открытия/закрытия диалога:

открыть:

function () {
    $(this).parent().appendTo("form").css("z-index", "9000"); //Move the div first
    $(this).append('<iframe id="iFrame" allowtransparency="true" frameborder="0" width="100%" height="100%" src="somePage.aspx"></iframe>');}, //then add the iframe
}

Закрыть:

function() {
    $(this).empty(); //clear the iframe out because it is added on open, 
    //if you don't clear it out, you will get multiple posts
    $(this).parent().appendTo("divHidden"); //move the dialog div back (good house-keeping)
}

HTML:

<div id="divHidden" style="display: none">
    <div id="dialog" style="display: none">
    </div>
</div>
person user3334255    schedule 09.07.2014

вам нужно сохранить узел «Html» под iframe и после перемещения iframe добавить его обратно

person dekely    schedule 05.11.2013