【问题标题】:Target='_blank' to show in new window, NOT new tab, possible?Target='_blank' 在新窗口中显示,不是新标签,可能吗?
【发布时间】:2010-12-22 12:24:19
【问题描述】:

我该怎么做?

在 Firefox 中,链接会在新标签页中打开...我不希望用户为此设置浏览器设置...

我希望每当用户在我的主页上单击“联系人”时,都会出现一个带有联系人表单的弹出窗口。

我应该怎么做?

【问题讨论】:

  • 你真的应该重新考虑一下。用户应该控制他的环境。 joelonsoftware.com/uibook/fog0000000249.html
  • 我只能为自己说话,但是:为任何内容打开弹出窗口的网站会自动在我的书中扣除积分。如果您真的想要一个新对话框,也许 JavaScript 对话框(模态与否)对用户更友好?例如,来自 jQuery UI 的对话框:jqueryui.com/demos/dialog/#default
  • @soulmerge 您对 OP 的用例了解多少?这是面向公众的 B2C 网站吗?也许这是她/他和同事在内部使用的管理工具(不太可能 - 但在我的情况下它是一个管理工具)。我相信 Joel 是 Excel 没有被重写的原因,并且仍然是我使用的最烦人的应用程序(除了 word),所以我不确定他是 UX 方面的最佳人选。只是一个想法。
  • 我刚刚访问了您发布到 Joel 网站的链接...汉堡菜单和左上角的文件夹图标,没有悬停标题.... UX 没有人可以关注 - 除非您想制作一个系统和 insta 的浏览器 web 应用程序一样糟糕。
  • 我真正的意思是“永远不要说永远”......除非你确定你知道所有可能被编码的用例的所有细节。 ! ;)

标签: javascript html browser


【解决方案1】:

一切正常

window.open(yoururl, "Popup", "location,status,scrollbars,resizable,width=800, height=800");

所有参数见window.open

编辑日期:- 2021 年 8 月 12 日 如果您不想使用 JavaScript 函数,那么您可以在 New Windows 中编写打开页面的内联脚本,它支持所有现代浏览器

<a href="https://stackoverflow.com/" onclick="window.open('https://stackoverflow.com/', 'newwindow', 'width=400, height=250'); return false;">with href</a>


<a href="#" onclick="window.open('https://stackoverflow.com/', 'newwindow', 'width=400, height=250'); return false;">without href</a>

您可以在 jsfiddle.net link 上查看 Live Working 示例

【讨论】:

  • 这应该有更多的赞成票。虽然这最终取决于浏览器,但使用它向浏览器表明它应该是一个弹出窗口。
  • 这对弹出窗口拦截器有何影响?
  • 同意约翰:Kiran os 的回答 OK。基本的 window.open 不起作用:Firefox(例如)在新选项卡中打开。但基兰的方法是对的。
【解决方案2】:

您无法控制 - 这完全由用户代理自行决定;毕竟,这才是重点。您可以指定的只是页面在不同的视窗上下文中打开,由用户决定他们希望您的窗口如何占用他们的屏幕空间/任务栏列表/Alt-Tab 快捷方式等。

事实上,我会更进一步说,如果可能的话,您应该完全避免打开新的选项卡/窗口。我知道当网站这样做时我会有点恼火,感觉有点笨拙,就像 1990 年代我们现在拥有的所有 Ajax 和浮动 div 和魔法一样。

【讨论】:

  • OAuth等流程需要。似乎其他人已经完成了这一壮举。
  • Facebook 是如何通过他们的身份验证来做到这一点的? Twitter 和 pinterest 也一样?
  • @Icm 自从我发布这个答案以来的十二年里,事情可能已经发生了变化。
【解决方案3】:
<a href="javascript:window.open('http://example.com/popup.html','blank')">Contact</a>

【讨论】:

  • 我相信你的意思是window.open。
  • 还有_blank。和void,否则窗口引用的toString 将替换当前文档。而且它仍然不起作用(如果浏览器是这样配置的,它将在新窗口中打开)。由于不必要地使用javascript: URL(永远不要使用这些)而无法访问。
  • 我当然不认为你应该这样做,但你可以。无法访问 javascript URL 是一个可以通过修改文档 onLoad 轻松解决的问题。
  • 只是给出一个不使用它的具体理由,对于任何偶然发现它的人,根据Mozilla:永远不要使用这种形式的链接代码:&lt;a href="javascript:window.open(...)" ...&gt; "javascript:" links break每个浏览器中网页的可访问性和可用性。
【解决方案4】:

我认为这是一个仅限浏览器的设置,无法通过 HTML 或 Javascript 进行设置。

【讨论】:

  • 无法设置,但正如@Mark Byers 指出的那样,Javascript 可以打开一个新窗口。
【解决方案5】:

当我研究这个问题时,我注意到 window.open() 函数的“高度”和“宽度”部分是导致链接在新窗口而不是新选项卡中打开的原因。

所以为了打开一个类似大小的浏览器,我只是将 window.innerHeight 和 window.innerWidth 传递给了 window.open() 函数。

我本来想对@M2012 的回答发表评论,但我的分数还不够……

希望这会有所帮助!

【讨论】:

    【解决方案6】:

    如果你想通过 Code Behind 来使用这个东西,那么它也可以工作......

    protected void lnkAddNewWorkout_Click(object sender, EventArgs e)
        {
      //  Response.Write("<script>window.open('MyCreatedWorkout.aspx','_blank');</script>");    //it Open in new tab
    
        ResponseHelper.Redirect("MyCreatedWorkout.aspx", "_blank", "menubar=0,width=700,height=700");
    
        }
    
    
    
     public static class ResponseHelper
        {
            public static void Redirect(string url, string target, string windowFeatures)
            {
                HttpContext context = HttpContext.Current;
            if ((String.IsNullOrEmpty(target) ||
                target.Equals("_self", StringComparison.OrdinalIgnoreCase)) &&
                String.IsNullOrEmpty(windowFeatures))
            {
    
                context.Response.Redirect(url);
            }
            else
            {
                Page page = (Page)context.Handler;
                if (page == null)
                {
                    throw new InvalidOperationException(
                        "Cannot redirect to new window outside Page context.");
                }
                url = page.ResolveClientUrl(url);
    
                string script;
                if (!String.IsNullOrEmpty(windowFeatures))
                {
                    script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
                }
                else
                {
                    script = @"window.open(""{0}"", ""{1}"");";
                }
    
                script = String.Format(script, url, target, windowFeatures);
                ScriptManager.RegisterStartupScript(page,
                    typeof(Page),
                    "Redirect",
                    script,
                    true);
            }
        }
    }
    

    推荐人:http://www.codeproject.com/Tips/317410/Response-Redirect-into-a-new-window

    【讨论】:

      【解决方案7】:

      这是你无法控制的。

      但您可以尝试在新窗口中打开,然后在浏览器拒绝尝试时显示替代解决方案。

      您可以通过检查 window.open() 的返回值来完成此操作。

      var win = window.open(strUrl, strWindowName);
      if (!win) {
          // Call failed. Handle it here. 
          // You can for example open content in a model or show a button that 
          // will open content in a new tab
      }
      

      window.open 文档:https://developer.mozilla.org/en-US/docs/Web/API/Window/open

      【讨论】:

        【解决方案8】:

        在 HTML 中打开新窗口的最佳方式。

        <a href="#" onclick="MM_openBrWindow('http://www.google.com','','resizable=yes,width=800,height=600')"> Google</a>
        
        <script>
        function MM_openBrWindow(theURL,winName,features) { //v2.0
          window.open(theURL,winName,features);
        }
        </script>
        

        【讨论】:

        • 这个问题特别是关于强制打开一个新窗口而不是一个选项卡,正如 window.open() 的MDN article 所表明的那样,这种行为不太可能在一个现代浏览器,尽管这似乎是打开窗口最直接的 JS。
        【解决方案9】:

        这也是一种简单的方法,但链接不可见,适合按钮操作

        <a onclick="window.open('print.html', 'newwindow', 'width=300,height=250');"> Print</a>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-01-21
          • 2011-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-03
          相关资源
          最近更新 更多