【问题标题】:Safari and window.open() -- how to use it and not get focus?Safari 和 window.open() - 如何使用它而不是获得焦点?
【发布时间】:2014-12-16 19:34:57
【问题描述】:

我的订单输入网站正在增强,具有主/子窗口架构。子窗口将用于“顺便...”搜索,主窗口是进行编辑的地方。主窗口定期向子窗口传达信息。如果它有一个子句柄,例如 window.open() 中的句柄,那么这很容易。

因为用户可能会刷新主窗口 (F5),所以页面必须恢复其子级列表。除了使用 window.open() 浏览可能的子窗口名称列表之外,我不知道这样做的方法。在我运行 Windows 的计算机上测试这个想法,使用 Chrome / Firefox / MSIE 浏览器,一切正常。

但是,我没有得到很好的 Safari 搜索结果。在各种 Mac OS / Safari 版本上运行时,调用 window.open() 总是也会将该窗口带到前台。对我来说,这是破坏交易的行为。 运行 window.open() 然后 window.blur() 是不可接受的,因为不需要的窗口会闪烁显示。

问题:有没有一种方法可以调用 window.open()(而不是 window.blur()),同时始终抑制“带到前台”行为?

问题:有没有使用 window.open() 获取窗口句柄的方法?

谢谢, 杰罗姆。

【问题讨论】:

    标签: javascript browser safari cross-browser


    【解决方案1】:

    window.opener 将是您问题的答案。但是 IE 不支持 window.opener。 像下面这样的东西会有所帮助。

    if ($.browser.safari)
     std = window.opener("", "childwindowname");
    else
     std = window.open("", "childwindowname");
    

    【讨论】:

    • 在工作中,一位同事用“window.opener.somefunc(window);”回答了这个问题。当孩子被打开时,它会调用它的开启者并告诉上下文它有一个孩子。它保留了一个孩子的名单。我的站点具有复杂的行为,用户可能会将父窗口导航到站点中的另一个页面。孩子们将定期 ping 父母(无论内容如何,​​窗口的父母:孩子关系仍然存在)以减轻其对孩子的健忘症。到目前为止,这是有效的。我会将其添加为单独的答案,但 SO 管理员会要求我“偏离主题的回复”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    相关资源
    最近更新 更多