2013-04-11 4 views
4

Я разрабатываю приложение sp2013, а это означает, что он использует iframes. В частности, это очень большой iframe, который занимает большую часть экрана. Во многих случаях я открываю диалоговые окна jquery ui. Они настроены на то, чтобы появляться в середине области просмотра, что здорово, за исключением того, что оно отображается в середине iframe, а не в середине видимого экрана.JQuery UI Диалог внутри iframe

Есть ли способ, которым я могу указать jquery ui, чтобы просмотреть свойства прокрутки window.top, вместо iframes?

Редактировать: IFrame и родитель находятся в одном домене, поэтому проблемы с междоменным доступом не являются проблемой.

+0

Не могли бы вы попробовать и поместить это в начало страницы, загруженной в iframe? '' –

+0

Попробуйте плагин jQuery postMessage, который является инструментом межкадровой связи, и вы передаете с ним переменные и методы. http://benalman.com/projects/jquery-postmessage-plugin/ –

+0

@Jules Это ничего не даст диалогу jQuery. – Mooseman

ответ

7

Хорошо, поэтому я нашел решение. Когда я объявляю свой диалог, я сделал следующее:

$("selector").dialog({ 
    position: {my: "center", at: "center", of: window.top} 
}); 
+0

Это не работает в кросс-домене ** Ошибка: Permission denied для доступа к свойству "nodeType" ** в jquery.min.js. – TMS

+1

Правильно. Я добавил, что они были тем же самым доменом в моем вопросе. Я не уверен в решении, которое будет работать в междоменном режиме. –

+0

Спасибо @Colin, я опубликовал [новый вопрос об этом] (http://stackoverflow.com/questions/22921363/jquery-ui-dialog-in-a-cross-domain-iframe?lq=1). – TMS

0

HTML:

<div id="dialog">Hello, world!</div> 

JQuery:

alert('Window size: '+window.innerWidth); 
var dialogWidth = 500; 
var dialogHeight = 200; 
var dialogX = (window.innerWidth - dialogWidth)/2; 
var dialogY = (window.innerHeight - dialogHeight)/2; 
$("#dialog").dialog({ position: [dialogX,dialogY], width: dialogWidth, height: dialogHeight }, 500); 
alert('Dialog position: '+$("#dialog").dialog("option", "position")); 

Fiddle: http://jsfiddle.net/3vjsa/3/

Запускается внутри фрейма. Центрируется по горизонтали и по вертикали. Если центрированное положение окна выйдет за пределы iframe, оно будет перемещено к краю iframe. Добавлены сообщения оповещения, чтобы показать ширину окна и положение диалога.

+0

Хмм. Я думаю, что это просто повторение того, что уже делает jquery ui. Но это привело меня к правильному ответу. –

+0

Мой ответ позволяет сделать немного больше, чем 'position: {my:" center ", at:" center ", of: window.top}' does. Используйте то, что работает для вас. – Mooseman

+0

Тем не менее, вы все равно будете в центре iframe. На самом деле это не отвечает на вопрос. –

Смежные вопросы