Как отобразить IFRAME внутри диалогового окна JQuery UI
В веб-приложении, которое я обновляю, используются jQuery и jQuery UI. Я заменил большинство экземпляров window.open
и <a target=_blank>
диалоговым окном jQuery UI. Например, условия и условия, используемые для открытия в новом окне; теперь я использую диалог JQuery UI с AJAX. Для согласованности я планирую использовать его там, где это возможно.
Одним из таких мест является страница, где у меня будут внешние ссылки на видео. Что-то вроде:
<a href="#" onclick="location.href='http://website.com/videos/1.html'; return false;" target="_blank"><img src="http://website.com/videos/1.png"></a>
<a href="#" onclick="location.href='http://website.com/videos/2.html'; return false;" target="_blank"><img src="http://website.com/videos/2.png"></a>
В некоторых ситуациях я могу использовать target=iframe1
. Теперь вместо того, чтобы открывать содержимое в iframe или всплывающем окне, я хочу отображать содержимое внутри всплывающего диалогового окна. Как я могу использовать диалог JQuery UI для достижения этого? Будут ли какие-либо ошибки?
Ответы
Ответ 1
Существует несколько способов сделать это, но я не уверен, какая из них лучшая. Первый подход - вы можете добавить iFrame в контейнер диалога "на лету" с помощью данной ссылки:
$("#dialog").append($("<iframe />").attr("src", "your link")).dialog({dialogoptions});
Другим было бы загрузить содержимое вашей внешней ссылки в контейнер диалога с помощью ajax.
$("#dialog").load("yourajaxhandleraddress.htm").dialog({dialogoptions});
Оба работают нормально, но зависят от внешнего контента.
Ответ 2
Проблемы были:
- содержимое iframe происходит из другого домена
- Размеры iframe должны быть скорректированы для каждого видео
Решение, основанное на ответе omerkirk, включает в себя:
- Создание элемента iframe
- Создание диалога с
autoOpen: false, width: "auto", height: "auto"
- Указание источника, ширины и высоты iframe перед открытием диалогового окна
Вот грубая схема кода:
HTML
<div class="thumb">
<a href="#" onclick="location.href='http://jsfiddle.net/yBNVr/show/'; return false;" data-title="Std 4:3 ratio video" data-width="512" data-height="384"><img src="http://dummyimage.com/120x90/000/f00&text=Std+4-3+ratio+video" /></a></li>
<a href="#" onclick="location.href='http://jsfiddle.net/yBNVr/1/show/'; return false;" data-title="HD 16:9 ratio video" data-width="512" data-height="288"><img src="http://dummyimage.com/120x90/000/f00&text=HD+16-9+ratio+video" /></a></li>
</div>
JQuery
$(function () {
var iframe = $('<iframe frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>');
var dialog = $("<div></div>").append(iframe).appendTo("body").dialog({
autoOpen: false,
modal: true,
resizable: false,
width: "auto",
height: "auto",
close: function () {
iframe.attr("src", "");
}
});
$(".thumb a").on("click", function (e) {
e.preventDefault();
var src = $(this).attr("href");
var title = $(this).attr("data-title");
var width = $(this).attr("data-width");
var height = $(this).attr("data-height");
iframe.attr({
width: +width,
height: +height,
src: src
});
dialog.dialog("option", "title", title).dialog("open");
});
});
Демо здесь и код здесь. И еще один пример в аналогичных строках