从Windows 7小工具中嵌入的Iframe中访问父DOM /函数

时间:2011-02-03 10:01:37

标签: javascript jquery iframe parent windows-desktop-gadgets

我有以下问题,我正在创建一个Windows 7小工具,它使用Iframe加载内容。我可以完全控制Iframe的内容,我想要做的是,在父级中调用一个函数(Windows 7来自此iframe的小工具html文档),甚至可以在iframe中触发弹出按钮,当链接悬停在某个链接上时。
非常感谢任何帮助 由于
enter image description here

1 个答案:

答案 0 :(得分:2)

尽管最初声称Windows桌面小工具被排除在Same Origin Policy的限制之外,但仅适用于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变量,如下所示: / p>

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;
});
相关问题