使用Chrome在window.open中更改行为

时间:2012-09-27 22:24:36

标签: javascript google-chrome bookmarklet

我有以下书签,打开SMF论坛“未读主题”页面中显示的所有帖子(原文是单行):

javascript:(function(){
  var topics = new Array();
  var links = document.getElementsByTagName('a');
  for (var i = 0; i < links.length; i++) {
    if (links[i].href.indexOf('#new') != -1)
      topics.push(links[i].href);
  }
  for (var i = 0; i < topics.length; i++) {
    window.open(topics[i]);
  }
})();

以前工作正常:我用链接打开页面,点击书签,所有主题都会在新标签中打开。

最后一次Chrome更新(我当前版本为22.0.1229.79 m,Windows 7 x64)后,此更改。单击它时,第一个主题在新选项卡中打开,但其他主题在弹出窗口中打开(我必须在第一次时对其进行授权)。

我的问题是:

  1. 如何解决此问题并恢复旧行为?
  2. 是什么导致了这种变化?

2 个答案:

答案 0 :(得分:0)

Open a new tab in the background?可能有所帮助:建议使用document.createEvent然后initMouseEvent来模拟ctrl-click或OS X上的元点击。

答案 1 :(得分:0)

尝试将此黑客作为解决方法。为我工作。

javascript:(function(){
  var topics = new Array();
  var links = document.getElementsByTagName('a');
  for (var i = 0; i < links.length; i++) {
    if (links[i].href.indexOf('#new') != -1)
      topics.push(links[i].href);
  }
  for (var i = 0; i < topics.length; i++) {
    setTimeout(function(){ window.open(topics[i]) }, 500); // ADDED setTimeout
  }
})();

您可能需要修改Chrome的弹出式窗口设置。如果chrome阻止弹出窗口,则会在URL栏的右角显示一个小图标。

你也可以在这里直接编辑它们:chrome:// chrome / settings / contentExceptions#popups

我能够以这种方式打开至少30个标签,但似乎可以通过这种方式打开的标签数量有限制。玩超时可能会有所帮助。或者你可以打开30,然后再次点击打开30多个等等 - 显然是一个小的代码更改。 “30”只是一个例子。尝试找到最佳数字。

值得注意的是,当我修改弹出窗口阻止程序设置并使用没有setTimeout的代码时,发生了两个标签打开,然后打开了大量新窗口。我认为这是错误。在这种情况下,我无法看到任何可能的原因从标签更改为窗口。