【问题标题】:window.open in quirks mode also changes subsequent page to quirks mode怪癖模式下的 window.open 也会将后续页面更改为怪癖模式
【发布时间】:2015-10-06 14:00:55
【问题描述】:

我正在使用 window.open 打开一个新窗口,从后面的代码到以 quirks 模式运行的页面。但是,当我单击此按钮转到第二页时,它也会更改第一页模式。

这是我写的一段代码:

Dim url1 As String = "MYURL.html"
Response.Write("<script>")
Response.Write("newwindow=window.open('" + url1 + "','_blank');")
Response.Write("newwindow.focus()")
Response.Write("</script>")

有没有办法解决这个问题?

注意:我的目标页面确实应该在 quirks 模式下运行,所以这不是我可以忽略的部分,而且我必须使用在服务器上运行的按钮来执行此操作,因此我无法使用目标设置为_blank的锚标记。

【问题讨论】:

    标签: javascript vb.net quirks-mode


    【解决方案1】:

    试试这个:

    Dim url1 As String = "MYURL.html"
    Response.Write("<script>")
    Response.Write("function fen_pop(url) {")
    Response.Write("newwindow=window.open('" + url + "','_blank');")
    Response.Write("if (window.focus) {newwindow.focus();}")
    Response.Write("newwindow.focus();")
    Response.Write("return false;")
    Response.Write("}")
    Response.Write("</script>")
    

    在您的 html 中使用链接:

    <a href="#" onclick="return fen_pop('MYURL.html')">Link to popup</a>
    

    “返回 false;”补充说我认为会解决你的问题。 这是为了防止浏览器跟随实际链接。


    另一种写法是:

    Response.Write("<script>")
    Response.Write("function fen_pop(url) {")
    Response.Write("newwindow=window.open('" + url + "','_blank');")
    Response.Write("if (window.focus) {newwindow.focus();}")
    Response.Write("newwindow.focus();")
    Response.Write("}")
    Response.Write("</script>")
    

    在 html 页面中:

    <a href="#" onclick="fen_pop('MYURL.html'); return false;">Link to popup</a>
    

    【讨论】:

    • 感谢您的回答...我真的应该在按钮上使用此代码,所以我在一个按钮上尝试了上面的代码,但是“return false”会阻止新窗口打开,所以第一页只会越来越刷新并进入怪癖模式
    • nop,首先调用该函数打开窗口。并在返回 false 阻止源网页后,重试。
    • 我又试了一次,但效果还是一样的直接在按钮的 onclick 属性中,因为它尚不存在,如果我在后面的代码中不使用 fen_pop 函数编写此返回 false 仍然会产生相同的效果
    【解决方案2】:

    我终于找到了一种方法,但这有点麻烦,但它现在可以完成这项工作

    Dim url1 As String = "MYURL.html"
    Response.Write("<script>")
    Response.Write("newwindow=window.open('" + url1 + "','_blank');")
    Response.Write("newwindow.focus()")
    Response.Write("window.open('" + HttpContext.Current.Request.Url.AbsoluteUri + "','_self')")
    Response.Write("</script>")
    

    代码下面的行将获得相同的 url 并在同一个选项卡中打开它(就像 location.reload(); 会做的那样,但在这种情况下我无法使用它,所以我想出了这个替代品)并且作为第一个页面有一个元标记,可以在 ie edge 中打开页面,一切看起来都很好。

    Response.Write("window.open('" + HttpContext.Current.Request.Url.AbsoluteUri + "','_self')")
    

    编辑: 如果弹出窗口阻止程序仍然阻止该站点,则第一页将进入怪癖模式.. 但是下面的代码会提醒用户解决问题,如果弹出窗口阻止程序被禁用,它会显示第二页

    Dim url1 As String = "MYURL.html"    
    Response.Write("<script>")
    Response.Write("newwindow=window.open('" + url1 + "','_blank');")
    Response.Write("if(!newwindow || newwindow.closed || typeof newwindow.closed=='undefined'){")
    Response.Write("alert('please disable pop-up blocker for this site');")
    Response.Write("}")
    Response.Write("else{")
    Response.Write("newwindow.focus();")
    Response.Write("}")
    Response.Write("window.open('" + HttpContext.Current.Request.Url.AbsoluteUri + "','_self')")
    Response.Write("</script>")
    

    编辑 2:我终于发现了问题所在...实际上 response.write 是我的第一页进入怪癖模式并修复它的原因,我使用了 Page.RegisterClientScriptBlock 之类的波纹管打开我的窗口,一切正常

    Page.RegisterClientScriptBlock("", "<script>window.open('" & MYURL & "', '_blank', 'toolbar=no');</script>")
    

    【讨论】:

      最近更新 更多