【问题标题】:Accessing parent DOM/function from within an Iframe embedded in Windows 7 gadget从嵌入在 Windows 7 小工具中的 iframe 中访问父 DOM/函数
【发布时间】:2023-03-07 15:38:01
【问题描述】:

我有以下问题,我正在创建一个 windows 7 小工具,它使用 iframe 加载内容。我可以完全控制 iframe 的内容,我想要做的是,调用父级中的一个函数(windows 7小工具 html 文档),在此 iframe 中,甚至在链接或其他内容上悬停时触发 iframe 中的浮出控件。
非常感谢任何帮助。
谢谢

【问题讨论】:

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


    【解决方案1】:

    虽然最初据说 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 变量,如下所示:

    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;
    });
    

    【讨论】:

    • 似乎有一些问题,我尝试执行以下操作:$("a", iframe.contentWindow).click(function () { $(this).css("background","红色的”); }); iframe 中的任何东西似乎都没有发生任何事情。我也试过 $("a", document.getElementById("InoutIframe").contentWindow).live("mouseover",function () { $(this).css("background ","re​​d"); });,其中 iframe 的 id 是 InoutIframe,结果与以前相同。知道我做错了什么吗?
    • @Neeraj:我的错,应该是.contentWindow.document
    • 似乎某个地方的跨源策略存在一些问题......似乎仍然不起作用。
    • 更准确地说,当我尝试执行 window.location="something.html" 和 window.top.location="something.html" 时,会打开一个新的 IE 窗口并加载新的 url在那里,直接调用 System.Gadget 失败。
    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2010-11-20
    • 2014-03-08
    相关资源
    最近更新 更多