【问题标题】:Chrome cross-window communicationChrome 跨窗口通信
【发布时间】:2024-08-18 20:25:01
【问题描述】:

我有一个 HTML5 框架,并且已经开发和集成了调试器/配置文件/控制台等。在全屏模式下,我看不到调试器(显然是因为画布是全屏的)。所以,我需要做另一个选项卡或弹出窗口,以便可以将调试器移到另一个监视器或其他任何东西上。但是,调试器需要能够访问(监视)打开它的窗口或选项卡。

我唯一的其他选择是在加载框架的调试版本时不允许全屏显示,但这不是我想要的各种搜索路径。所以基本上我的问题是,我可以让一个窗口(webapp)打开一个弹出窗口(调试器)并让那个弹出窗口访问打开的窗口(webapp)吗?

【问题讨论】:

    标签: javascript dom cross-window-scripting


    【解决方案1】:

    是的,你可以这样做,如果父窗口和子窗口来自不同的域,浏览器会出于安全原因阻止它。

    如果两个页面在不同的域上运行并且您可以控制父窗口和子窗口代码,请在两个页面上设置此项。

    document.domain = '.xyz.com';
    

    您可以调用子窗口对象,如,

    winobj=window.open('child window') 
    ...
    winobj.document.getElementById("elementname").value=""
    

    和父窗口一样,

    window.opener.functionname(a,b) or window.opener.buttonid.name
    

    请查看响应头 'Access-Control-Allow-Origin' 允许在您无法控制父或子窗口域且它们不同的其他域上执行跨域脚本。

    【讨论】:

    • 谢谢。不需要跨域。他们将从他们的文件系统本地启动,然后加载 javascript 框架(使用调试器)。所以我只需要能够访问另一个窗口的数据(主要对象),这样我就可以获得分析信息。
    • 如果它们不在同一个域上,默认情况下是您的服务器名称,xyz.pqr.com,但它们都在同一个域上,如 *.pqr.com,那么它可以在没有任何额外的情况下工作设置,但浏览器的安全设置随版本而变化。如果遇到问题,您可以随时使用 document.domain = '.pqr.com';保持域相同。谢谢。
    • Daaa,太简单了。我完全忘记了 window.open() 返回了任何东西!!!谢谢大家。
    【解决方案2】:

    opener属性怎么样?

    opener.runFunction();

    【讨论】: