使用 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 引导表单?
在 vue.js 小部件中打开多个选项卡时找出活动选项卡的方法