window.open 在怪癖模式下也会将后续页面更改为怪癖模式

window.open in quirks mode also changes subsequent page to quirks mode

我正在使用 window.open 打开一个新的 window 从代码隐藏到一个 运行 处于怪癖模式的页面。但是,当我单击此按钮转到第二页时,它也会更改第一页模式。

这是我写的一段代码:

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

有办法解决这个问题吗?

注意:我的目标页面确实应该 运行 处于怪癖模式,所以这不是我可以忽略的部分,我必须使用位于 运行 的按钮来完成此操作服务器,所以我无法使用目标设置为 _blank.

的锚标记实现相同的效果

试试这个:

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 中使用 link :

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

添加的 "return false;" 我认为可以解决您的问题。 这是为了防止浏览器遵循实际的 link.


另一种写法是:

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>

最后我找到了一种方法,但这有点变通,但它现在可以完成工作

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 像下面那样打开我的 window 并且一切正常

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