【问题标题】:window.open() parameters ignored when opening cross-origin window in Microsoft Edge在 Microsoft Edge 中打开跨域窗口时忽略 window.open() 参数
【发布时间】:2020-01-01 10:49:49
【问题描述】:

在 Microsoft Edge 中,当 url 与当前域不同时,以下 sn-p 将忽略传递给 window.open() 的选项。但是它在 Chrome 和 Firefox 中运行良好,并且当域是相同的来源时。

const popupWindow = window.open(
    url,
    title,
    'menu=no,toolbar=no,width=700,height=600,scrollbars=1,resizable=0,' +
        'directories=no,location=no,screenX=0,screenY=0,top=48,left=48',
);

我找到了一个让窗口正确调整大小的 hacky 解决方法,但这真的很烦人,你可以看到它重定向页面。

const popupWindow = window.open(
    "/#",
    title,
    'menu=no,toolbar=no,width=700,height=600,scrollbars=1,resizable=0,' +
        'directories=no,location=no,screenX=0,screenY=0,top=48,left=48',
);
popupWindow.location.href = url;

如何在 Microsoft Edge 上进行这项工作?为什么 Microsoft Edge 会忽略我的大小和其他参数?这是一个错误吗?

【问题讨论】:

    标签: javascript html browser microsoft-edge


    【解决方案1】:

    我尝试检查问题,它看起来像与安全设置相关的问题。

    我建议您修改以下 Internet 选项 设置。

    (1)启用跨域访问数据源选项。

    Internet 选项 -> 安全(选项卡)-> 自定义级别 -> 其他 -> 跨域访问数据源 -> 设置为启用

    (2)禁用保护模式

    Internet 选项-> 安全(选项卡)-> 取消选中启用保护模式 用于 Internet 和本地 Intranet

    (3) 将两个域都添加到受信任的站点列表

    Internet 选项 -> 安全(选项卡)-> 受信任的站点 -> 站点 -> 将两个域添加到列表中。

    (4) 取消勾选要求服务器验证(https:)

    Internet 选项 -> 安全(选项卡)-> 受信任的站点 -> 站点 -> 取消选中需要服务器验证(https:) -> 输入 localhost url & 点击添加按钮。

    修改上述设置后,我测试了这段代码。

    const popupWindow = window.open(
        "https://Bing.com",
        "Microsoft page",
        'menu=no,toolbar=no,width=700,height=600,scrollbars=1,resizable=0,' +
            'directories=no,location=no,screenX=0,screenY=0,top=48,left=48',
    );
    

    Microsoft Edge 44.18362.1.0 中的输出:

    【讨论】:

    • 如果这些设置受组策略控制,是否有解决方法?
    • 如果您可以通过组策略修改这些设置,那么我可以尝试查找相关策略。如果您的意思是这些设置由组策略维护并且您无法对其进行修改,那么我建议您继续使用您的解决方法,因为我没有找到任何其他替代方法。
    • @Coburn,你能告知这个问题的状态吗?如果上面的答案解决了问题,那么请尝试接受答案。如果您自己找到了解决方案,请尝试将您的解决方案发布为答案。如果问题仍然存在,请告诉我们该问题的当前状态。感谢您的理解。
    • 这可能是本案的最佳答案。无法更改我计算机上的组策略,但这应该可以解决其他任何人的问题。
    【解决方案2】:

    对我来说它工作正常,所以问题可能出在您使用的 Edge 版本上。您可以使用caniuse.com 来检查您是否可以使用东西。然而,既然你已经找到了这种 hacky 的使用方式,你可以把它变成这样的函数:

       function popup(url, title){
         const popupWindow = window.open(
           "/#",
           title,
           'menu=no,toolbar=no,width=700,height=600,scrollbars=1,resizable=0,' +
           'directories=no,location=no,screenX=0,screenY=0,top=48,left=48',
         );
         popupWindow.location.href = url;
       }
    

    现在你可以使用弹出功能了。

    顺便说一句,我可以看到你正在使用 ES6。确保您的 Edge 版本支持 const。

    【讨论】:

    • 它确实支持 const,v 42.17134.1098.0 是我正在使用的。经过进一步测试,似乎只有我们的内部域忽略了参数...在https://eprize.com 上使用window.open() 总是忽略参数,无论我在运行window.open() 时在哪个站点上(即使在google.commsn.com)。 window.open()https://example.comhttps://google.com 似乎工作得很好
    • 不,我认为这不是协议问题,我没有看到 http 和 https 之间的模式导致问题。经过更多的测试,似乎没有模式。在https://eprize.comhttps://google.comhttps://example.com 上执行window.open() 似乎再次忽略了参数,所以它不仅仅是打开一个域......我很难过
    • 我刚刚在我的 Edge 上试用过,它对我有用。无论如何,大多数人都不使用 Edge。许多 Edge 用户正在迁移到 Edge (Chromium) 或 Chrome。 Chrome、Firefox 和 Opera 是大的,没有一点支持较少使用的浏览器。
    • 经过进一步测试,参数在eprize.commerkleinc.com之间被接受,但在merkleinc.comgoogle.com之间不被接受(ePrize归Merkle所有)。同样在force.comeprize.com 之间,它可以工作。在“Internet 设置”中找到的 Windows“受信任站点”和非“受信任站点”之间似乎存在某种问题
    • 哦,我已经解决了。在 IE 和 Edge 中编程非常困难。
    猜你喜欢
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2010-10-06
    相关资源
    最近更新 更多