【问题标题】:Programmatically open new pages on Tabs以编程方式在选项卡上打开新页面
【发布时间】:2010-09-30 11:02:31
【问题描述】:

我正在尝试“强制”Safari 或 IE7 打开一个新页面使用新标签

以编程方式我的意思是:

window.open('page.html','newtaborsomething');

【问题讨论】:

  • 我不确定我是否明白这一点 - 您是否正在开发一个适用于 IE 的应用程序,并且您想在新标签页上打开每个新页面?或者您只是想设置 IE 在单击链接时打开新选项卡?或者您是否正在创建任何具有更多链接的站点并且您希望它们单独打开?请说得更清楚。
  • 感谢您的所有 cmets 和回答,我知道这没什么大不了的,不应该成为我开发中的问题,但这是客户要求,不是我只想做的重要要求知道。问题是 IE7 和 Safari 不会使用 javascript 或 target 属性打开带有选项卡的弹出窗口,对吗?

标签: javascript internet-explorer-7 safari tabs


【解决方案1】:

您可以在 Firefox 中工作,将属性 target="_newtab" 添加到锚点以强制打开新标签。

<a href="some url" target="_newtab">content of the anchor</a>

你可以在javascript中使用

window.open('page.html','_newtab');

这么说,我部分同意 Sam。您不应该强迫用户打开新页面或新标签,而不向他们显示他们点击链接之前会发生什么。

让我知道它是否也适用于其他浏览器(目前我没有机会在 Firefox 以外的其他浏览器上试用它)。

编辑:为 ie7 添加了参考 也许这个链接有用
http://social.msdn.microsoft.com/forums/en-US/ieextensiondevelopment/thread/951b04e4-db0d-4789-ac51-82599dc60405/

【讨论】:

  • 感谢这个 Firefox 提示,现在我已经更新了我的 TargetKiller 插件以删除“_newtab”和“newtab”。 :P
  • 非常感谢您的回答,但我知道 Firefox 会这样做(有些文本,未经我测试,请注意这并不总是正确的,有 50-50 的机会获得新的窗口或选项卡)。我也认为这不应该是一个问题,但是,你知道客户 :)
  • 这可能并非在所有构建/平台上都是如此,但 Linux 上的 Firefox 3.5 不允许您多次执行此操作...如果您有多个 target="_newtab" 链接您的页面,点击其中任何一个只会填充一个单个新标签...也就是说,后续点击将覆盖之前在该标签中打开的任何内容。让我觉得这实际上是在打开一个命名“_newtab”的标签,而不是特定于浏览器的解决方法。
  • 我很确定“_newtab”是没有意义的,除非有人有相反的文档。您所做的只是打开一个 name 为 _newtab 的窗口(这就是为什么与该目标的所有后续链接都在同一窗口中打开的原因)。您可以定位“foo”或“bar”并查看相同的行为。唯一知名的目标是 _blank、_self、_parent 和 _top。 htmlcodetutorial.com/linking/_A_TARGET.html
【解决方案2】:

您无法直接控制它,因为它是由 Internet Explorer 用户控制的选项。

使用具有不同窗口名称的 Window.open 打开页面将在新的浏览器窗口中打开,如弹出窗口,在新选项卡中打开,如果用户将浏览器配置为这样做的话。

【讨论】:

  • 当“让 Internet Explorer 决定如何打开弹出窗口”选项被选中时,Internet Explorer 使用什么标准来做出这个决定?
【解决方案3】:

你们中尝试使用以下内容的人:

window.open('page.html', '_newtab');

真的应该看看window.open方法。

您所做的只是告诉浏览器打开一个名为“_newtab”的新窗口并将 page.html 加载到其中。您加载的每个新页面都会加载到该窗口中。但是,如果用户将其浏览器设置为在新选项卡而不是新窗口中打开新页面,它将打开一个选项卡。无论如何,它对窗口或选项卡使用相同的名称。

如果您希望在不同的窗口或选项卡中打开不同的页面,则必须将新窗口/选项卡的名称更改为不同的名称,例如:

window.open('page2.html', '_newtab2');

当然,新窗口/标签的名称可以是任何名称,例如 page1、page2、page3 等,而不是 _newtab2。

【讨论】:

  • 知道他的东西。 '_newtab' 不是保留名称。 '_blank' 是一个特殊的东西,它打开了另一个未指定和未命名的窗口/选项卡——这个你可以一遍又一遍地使用。 '_newtab' 并不特殊,只是它是您为新选项卡(默认)或窗口指定的特定名称,您的浏览器会使用您发送给它的任何 url 不断刷新。
【解决方案4】:

是否要使用新选项卡或新窗口取决于用户,修改此行为不是开发人员的职责。我认为你做不到。

我的烦恼 - 当网站强迫我在新窗口/标签中打开时,我讨厌它 - 我完全有能力为自己做出决定。尤其是当他们在 javascript 中执行此操作时 - 这真的没有帮助。

【讨论】:

  • +1 to Sam - 在选项卡或窗口中打开的新页面是浏览器(和用户)特定的选择。一般来说,当任何网站打开一个新窗口时,我都会讨厌它。
  • 除此之外:在“严格”定义中,没有有效的属性“目标”,因为不会惹恼用户。试试看:validator.w3.org
  • 我喜欢在家里打开批量标签,所以我是这种情况下的用户。只是提醒一下,有例外。
  • 虽然我同意网站强制执行操作可能会很烦人,但我认为在不考虑某人可能想要这样做的原因的情况下不应该做某事的简单状态有点无益。网站在新选项卡中打开内容很常见,尤其是外部网站链接,或者当将活动页面替换为新内容没有帮助时,这并非完全出乎意料的行为。我还建议这并不是问题的真正答案,并且更适合作为对原始帖子的评论。
  • 我不同意,假设用户的默认设置是每个 Web 应用程序而不是每个浏览器的设计选择。浏览器可以订阅应用程序不订阅的默认值。此外,如果浏览器为用户提供了一种覆盖应用程序默认值/浏览器默认值的方法,那么它是两全其美的。用户 > 应用程序 > 浏览器。
【解决方案5】:

你已经试过了吗

var open_link = window.open('','_blank');
open_link.location="somepage.html";

【讨论】:

  • 这个跨浏览器兼容吗?好像可以在IE8下工作,担心以后的版本或者其他浏览器。
  • 是的.. 它兼容跨浏览器。直到现在我都没有问题:D
【解决方案6】:

这 100% 有效

window.open('http://www.google.com/','_newtab' + Date.now());

【讨论】:

    【解决方案7】:

    我在 Chrome 中发现的,

    window.open('page.html','_newtab')
    

    只会工作一次。

    你可以使用:

    window.open(ct.getNewHref(),'_newtab' + Math.floor(Math.random()*999999));
    

    打开多个新标签。

    【讨论】:

    • 这是因为在 Chrome 中,_newtab 只是一个名称,而您要求它在名为“_newtab”的选项卡中打开页面
    【解决方案8】:

    我使用 jQuery 的代码:

    $("a.btn_external").click(function() {
        url_to_open = $(this).attr("href");
        window.open(url_to_open, '_blank');
        return false;
    });
    

    这对于区分子项中父项的点击事件很有用。使用这种方法,不会触发父级的点击事件。

    【讨论】:

    • 为什么不简单地使用普通的旧 html 呢? &lt;a href="page.html" target="_blank"&gt;foo&lt;/a&gt;
    • @pixelastic "使用这种方法,不会触发父级的点击事件。"
    【解决方案9】:

    如果您愿意,可以使用这种方法,虽然有点 hacky,但会提供所需的功能:

    jQuery('<a/>', {
        id: 'foo',
        href: 'http://google.com',
        title: 'Become a Googler',
        rel: 'external',
        text: 'Go to Google!',
        target:'_blank',
        style:'display:none;'
    }).appendTo('#mySelector');
    
    $('#foo').click()
    

    【讨论】:

    • 你能提供一个jsfiddle吗?
    【解决方案10】:

    如果您可以调用批处理文件,这可能会起作用(我使用 php XP sp2 和 IE8……你可以试试 IE7,不知道)。在 .bat 文件中使用以下(或类似内容)打开 Windows: 启动 ""C:\Progra~1\Intern~1\iexplore "http://www.site.com"。引号和 C:\Progr... 等之间没有空格。在某些时候,这可能会开始打开新窗口(即 target="_blank")而不是新选项卡,但在一定程度上可以工作;没有经过广泛测试。要在常规批处理文件 (CMD.exe) 中使用它,您可能需要已经打开一个窗口。只是分享一些我偶然发现的东西。为澄清而编辑。

    【讨论】:

      【解决方案11】:
      <a href="http://www.google.com/" target="_self">New Tab Example</a>
      

      在 IE7 中工作。

      问候,

      格伦

      【讨论】:

      • 格伦这与 OP 的要求相反。 _self 将在同一窗口或框架中打开文档。
      • 另外这不是以编程方式打开的方式。令人惊讶的是它如何通过这个答案获得 +10 rep(+3/-10)。
      猜你喜欢
      • 2010-10-29
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多