/ / Відкрити діалогове вікно JQuery UI з iframe, щоб він знаходився у верхньому вікні, коли iframe з іншого домену - javascript, jquery, iframe, jquery-ui-dialog

Відкрийте діалогове вікно JQuery UI from iframe, щоб він знаходився у верхньому вікні, коли iframe з іншого домену - javascript, jquery, iframe, jquery-ui-dialog

Я хочу відкрити діалогове вікно JQuery UI з iframe, але я не хочу, щоб діалогове вікно було дитиною iframe. Я хочу, щоб вона була дитиною у верхньому вікні.

Це питання було запитав раніше, але я не можу знайти два відповідізадовільний для моєї ситуації. Що робить мою ситуацію іншою є те, що мій iframe знаходиться з іншого домену, ніж у верхньому вікні. Вони використовують один і той же хост, але різні протоколи. Iframe подано за протоколом https, а верхнє вікно - за адресою http.


The відповісти з більшістю голосів (від @Dmitry) каже, що використовувати jQuery об'єкт з верхнього вікна, щоб відкрити діалогове вікно. подобається це:

window.top.jQuery.dialog(...);

Це працює, коли iframe та верхнє вікно знаходяться з одного домену, але коли вони не є, виникає наступна помилка:

Error: Permission denied to access property "jQuery"

The вибрана відповідь (за @CalebD) пропонує наступне:

Перемістіть ваш JavaScript таким чином, щоб він виконувався в контексті батьківський документ

Але це не роз'яснює, як це можна досягти. Єдиний спосіб, яким я бачу це, полягає в тому, щоб iframe викликав подія на document об'єкт верхнього вікна, але це знову викликає помилку, коли в iframe використовується інший домен, ніж верхнє вікно.


Тепер мій компроміс - використовувати такий код, щоб отримати найвищий вікно, яке можна використовувати.

var topWindow = (function() {
var topW = window;
while (topW.parent != topW.self) {
try {
var document = topW.parent.document; // Test
topW = topW.parent;
} catch(e) {
return topW.self;
}
}
return topW.self;
})(),

Тоді я можу використовувати:

topWindow.jQuery.dialog(...);

Звичайно, якщо в iframe використовується інший домен, діалогове вікно є дитиною iframe, але принаймні, він працює так, як я хочу, коли iframe знаходиться з одного домену.


Чи є спосіб відкрити діалогове вікно з iframe, щоб він був дитиною у верхньому вікні, коли IFRAME і верхнє вікно знаходяться з різних доменів? Чи є щось я можу зробити краще, ніж я?

Відповіді:

1 для відповіді № 1

Одна політика щодо походження не дозволяє вам взаємодіяти з цією сторінкою.

Вам потрібно буде керувати обома доменами та використовувати їх window.postMessage () щоб передавати деталі з однієї сторінки в іншу на що робити. На батьківській сторінці слід прослухати повідомлення та знати, як відкрити діалогове вікно.


1 для відповіді № 2

Використовуйте postMessage(). Він схожий на події, але працює поперемінно. Це майже єдиний спосіб дозволити двом фреймам з різних доменів спілкуватися, оскільки це повинно бути узгодженою (треба знати, що приходить повідомлення, можна було б завідомо послати повідомлення).