Доступ к родительской DOM / функции из Iframe, встроенного в гаджет Windows 7 - PullRequest
1 голос
/ 03 февраля 2011

У меня есть следующая проблема: я создаю гаджет для Windows 7, который использует Iframe для загрузки содержимого. У меня есть полный контроль над содержимым Iframe, я хочу вызвать функцию в родительском (Windows 7). HTML-документ гаджета), изнутри этого Iframe, или даже вызвать всплывающее окно изнутри Iframe, когда на ссылке или что-то есть указатель.
Любая помощь с благодарностью.
Спасибо
enter image description here

1 Ответ

2 голосов
/ 03 февраля 2011

Несмотря на то, что изначально гаджеты Windows Desktop были исключены из ограничений Одинаковой политики происхождения , это относится только к XMLHttpRequests.Если <iframe> указывает на страницу на www, то любая связь между страницей в рамке и гаджетом хостинга будет заблокирована.Если это так, то вы могли бы иметь возможность использовать метод междоменной связи, который основан на изменении hash самого верхнего окна.Внутри фрейма вы бы сделали что-то вроде этого:

window.top.location.hash = "#ShowFlyout";

Затем в коде для гаджета вы получите что-то вроде этого:

window.setInterval(function () {
    if (window.location.hash == "#ShowFlyout") {
        window.location.hash = "";

        System.Gadget.Flyout.file = "flyout.htm";
        System.Gadget.Flyout.show = true;
    }
}, 100);

Я неУ меня под рукой есть машина с Windows, чтобы протестировать ее прямо сейчас, но вы все равно можете попробовать.

Если iframe указывает на html-документ на локальном компьютере, то вы сможете получить доступ к глобальной System переменная как член самого верхнего оконного объекта - гаджета, например:

var System = window.top.System;
System.Gadget.Flyout.file = "some.htm";
System.Gadget.Flyout.show = true;

Или, также предполагая, что у вас есть контроль над содержимым выпадающего меню, вы можете установить обработчик событий для всехссылки с JQuery (так как вы пометили его):

$("a", iframe.contentWindow.document).click(function () {
    System.Gadget.Flyout.file = this.href;
    System.Gadget.Flyout.show = true;
});
...