使用 jQuery 打开多个选项卡

Posted

技术标签:

【中文标题】使用 jQuery 打开多个选项卡【英文标题】:Open multiple tabs with jQuery 【发布时间】:2014-01-17 16:03:01 【问题描述】:

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

我正在尝试创建一个会弹出多个选项卡的页面。我了解使用此代码...

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

将弹出 1 个新标签。但是,正如this *** 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(),我觉得我仍然会遇到完全相同的循环问题。


好的。把这一切都排除在外......除了“它由您的浏览器控制”之外,还有一个真正的答案吗?我觉得一定有办法。谢谢,对不起小说:)

【问题讨论】:

没有。这是浏览器所做的一项安全操作,以防止不良行为者为用户弹出不需要的页面。你到底为什么要这样做?也许您可以重新考虑解决问题的方法? 【参考方案1】:

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

只需循环遍历元素并获取 href,按照您想要的方式对其进行操作,然后将结果传递给 window.open(url)

【讨论】:

我知道如何调用window.open(),这根本不能解决我的问题......你甚至没有看我的JSFiddle并给我一个代码示例;如果您愿意并尝试过,它将产生我在这篇文章中解释的问题的确切结果。不酷! 我确实看过小提琴...代码很丑...并试图在链接上触发click。问题也很啰嗦……长大了。很抱歉试图提供帮助! 你是对的。对不起……这个问题让我很沮丧,我要问的任何人都会说它做不到。感谢您的帮助,我很感激! window.open 也不起作用,因此此解决方案无济于事。有充分的理由感到沮丧,因为它确实无法完成,这是因为这是多年来被滥用的一种不好的做法,因此任何体面的弹出窗口阻止程序都会被任何这些尝试触发(dispatchEvent 也是)。最佳情况下,您将只能打开第一个选项卡。【参考方案2】:

查看使用dispatchEvent 打开新标签:tested on 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);
);

【讨论】:

非常感谢。我真的很感激! 这只会为我打开第一个链接。其他被chrome屏蔽了。 @jbojcic 这是在更新的 chrome 更新之后,浏览器现在阻止它,我想是为了避免无聊的广告

以上是关于使用 jQuery 打开多个选项卡的主要内容,如果未能解决你的问题,请参考以下文章

jQuery onclick 事件为打开视图页面添加动态选项卡

如何使用 jQuery Validate 正确验证放置在多个选项卡上的 Twitter 引导表单?

jQuery EasyUI 选项卡面板tabs使用实例精讲

在 vue.js 小部件中打开多个选项卡时找出活动选项卡的方法

使用 Javascript/jQuery 在 iOS 10.3.3 (safari) 中打开一个新选项卡

Jquery自定义右键单击并在新选项卡中打开