【问题标题】:Javascript window.open inconsistent in ChromeJavascript window.open 在 Chrome 中不一致
【发布时间】:2012-11-18 20:09:33
【问题描述】:

我为用户提供了打开单个选项卡或选项卡组的选项。当他们点击一个特殊链接时,我想打开几个相关的标签。打开几个标签的javascript如下:

<li>
  <a href="javascript:launchAll()">Or launch them all at once</a>
</li>

<script>
   function launchAll() {
     var win = window.open("http://domain.com/page1");
     win = window.open("http://domain.com/page2");
     win = window.open("http://domain.com/page3");
     win = window.open("http://domain.com/page4");
   }
</script>

前两个作为选项卡打开,后两个尝试作为弹出窗口/在单独的窗口中打开,在我的情况下被阻止。取消阻止弹出窗口不是问题,这个 UI 也不是问题。我的问题是为什么这四个看似相同的调用会产生不同的结果。

更新:这似乎只发生在 Chrome 中。 Firefox 和 Safari 都作为新标签打开。有谁知道解决方法吗?

【问题讨论】:

  • 好问题,对我来说前三个正常打开,第三个在弹出窗口中打开。
  • 我只是尝试在打开其他链接之前添加延迟,但它不起作用...为了检测是否有不受欢迎的东西,我认为 Chrome 会记住用户是否在不久前点击过.在你的情况下,答案是否定的,因此它们被阻止了。
  • 尝试将_blank作为目标。我几乎可以肯定它不会起作用,但谁知道:) 另外,尝试将它们存储在不同的变量中。即使它也可能不起作用。
  • 这不能回答问题,但您不需要将 window.open(...) 分配给变量。随意取出代码中的“win =”部分,除非您打算在创建后与打开的窗口进行交互。

标签: javascript google-chrome


【解决方案1】:

这个限制实际上是由于 Chrome 的安全设置:Chrome 不希望人们能够通过单击打开无限的标签。因此,他们使用的设置是,第一次单击最多两个选项卡,每次额外单击一个选项卡。所以,如果你想解决这个问题,你必须做这样的事情:

<li>
  <a href="javascript:launchAll()">Or launch them all at once</a>
  <a href="javascript:launch()" id="test"></a>
  <a href="javascript:launch2()" id="test2"></a>
</li>

<script>
   function launchAll() {
     var win = window.open("http://domain.com/page1");
     win = window.open("http://domain.com/page2");
     document.getElementById("test").click();
   }
   function launch(){
     var win = window.open("http://domain.com/page3");
     document.getElementById("test2").click();
   }
   function launch2(){
     var win = window.open("http://domain.com/page4");
   }
</script>

请注意,由于&lt;a id="test*"&gt; 内容为空,它们不会显示在您的文档中,因此您的布局保持不变。

另外,请注意,click() 方法在 Firefox 中不存在,因此您必须使用类似 here 的方法。

【讨论】:

  • 谢谢。这是一种笨拙的 Intranet UI。我正在打开页面以从多个外部站点进行比较,并且无法使用 iframe。我想为用户省去点击一堆的麻烦,但所有链接都可用,所以他们总是可以在 Chrome 中做到这一点。呃。
  • 这不再适用于某些最新版本的 Chrome,可能是 25 或 26。jsfiddle.net/etjNf
猜你喜欢
  • 2017-10-26
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多