使用jQuery打开多个选项卡

时间:2013-12-30 18:17:58

标签: javascript google-chrome tabs jquery

好的,我觉得我已经在这里做了尽职调查...... JSFIddle - http://jsfiddle.net/taytayevanson/8BpHw/5/

我正在尝试创建一个会弹出多个标签页面。我明白使用这段代码......

<a href="google.com" target="_blank">New Tab</a>

将弹出 1 新标签。但是,正如this stackoverflow q / a中所述,它需要是“用户启动的事件”,Chrome才能弹出新选项卡而不是窗口。由于这个要求,循环将弹出1个新选项卡,然后为每个后续链接弹出新窗口。

jQuery("a.site").each(function(){
    var string = jQuery(this).attr("href") + "/" + jQuery("#arguments").val();
    jQuery(this).attr("href",string);
    jQuery(this).trigger('click');
});

我尝试以编程方式创建链接并单击它们,使用不同的插件,超时,方法,我甚至尝试“菊花链”处理并在页面加载上触发它(一个巨大的PHP / GET变量/页面加载触发器)但是它仍会弹出窗口,因为事件不是用户启动的。

我试过this ...

function clickLink(link) {
var cancelled = false;

if (document.createEvent) {
    var event = document.createEvent("MouseEvents");
    event.initMouseEvent("click", true, true, window,
        0, 0, 0, 0, 0,
        false, false, false, false,
        0, null);
    cancelled = !link.dispatchEvent(event);
}
else if (link.fireEvent) {
    cancelled = !link.fireEvent("onclick");
}

if (!cancelled) {
    window.location = link.href;
}
}

虽然我可以阅读它,但我不太了解它应该理解我应该传递给这个函数的东西。我试过这样的事......

jQuery("a.site").each(function(){
    var string = jQuery(this).attr("href") + "/" + jQuery("#launcher").val();
    jQuery(this).attr("href",string);
    clickLink(jQuery(this));
});

但我得到一个“对象没有方法'dispatchEvent'”控制台错误。我尝试使用相同的“var事件”并只是调用...

link.trigger(event);

但是那里也有一个控制台错误。我唯一没有尝试的是在this Q / A(使用jQuery.get()打开一个标签并写入它)但看到它仍然调用window.open(),我觉得我'我仍然会遇到完全相同的循环问题。


确定。得到了所有这些......除了“它是由你的浏览器控制”之外,还有一个真正的答案吗?我觉得必须有办法。谢谢,抱歉小说:)

2 个答案:

答案 0 :(得分:4)

请参阅使用dispatchEvent打开新标签:{在Chrome上测试}

DEMO

$('a.site').each(function () {  
    var clk = document.createEvent("MouseEvents");
    clk.initMouseEvent("click", false, true, window, 0, 0, 0, 0, 0, true, false, false, true, 0, null);
    this.dispatchEvent(clk);
});

答案 1 :(得分:-1)

我不会依赖于使用触发click来打开链接,并非所有浏览器都支持它,就像用户点击它一样(出于明显的安全原因)

只需循环遍历元素并抓住href,按照您想要的方式操作它,并将结果传递给window.open(url)