弹出菜单打开新选项卡,而不是在同一选项卡中继续

Pop up menu opens new tab instead of continuing in the same tab

本文关键字:选项 继续 菜单 新选项      更新时间:2023-09-26

我有一些代码,我点击弹出菜单按钮,然后出现菜单,当我在菜单元素上点击下一个。点击()时,它试图用菜单选项中的AJAX链接打开新的选项卡,但我想像用户一样使用它,然后它会在同一个选项卡中完成任务,而不打开新的。有没有办法让浏览器认为用户点击了那个?

HTML

<a class="_54nc" href="/ajax/groups/members/remove.php?group_id=xxx&amp;uid=xxx" rel="dialog-post" role="menuitem">
<span>
<span class="_54nh">Remove from group</span>
</span>
</a>

JS

array = $('a._54nc').get();
array[0].click();

因此,基本上,如果用户点击该链接,就会显示同一选项卡上的下一个弹出窗口,但当我用javascript这样做时,它试图在新选项卡中打开AJAX链接,但以失败告终。

如果您在浏览器的选项卡中加载了内容脚本,那么您可以创建一个鼠标事件,然后触发该事件来复制用户单击dom 的效果

/**
* create mouse event and dispatch
* param {string} type     event name
* param {DOM Element} el  DOM element on which event will trigger
*/
function triggerMouseEvent (type, el) {
    var myEvent = new MouseEvent(type, {
        'view': window,
        'bubbles': true,
        'cancelable': true
    });
    el.dispatchEvent(myEvent);
}
var array = $('a._54nc').get();
var element = array[0];
triggerMouseEvent('mousedown', element);
triggerMouseEvent('mouseup', element);

第二个解决方案

若你们想在同一个窗口中打开url,那个么你们可以更改窗口的位置。(正如@some非描述性用户在评论中指出的那样)

var uri = element.getAttribute('href');
self.location.href = uri;

您可以做的另一件事是在具有相同url的页面中插入iframe。

var myFrame = '<iframe src='+uri+' width="'+window.innerWidth+'" height="'+window.innerHeight+'" style="position:absolute;"></iframe>';
$('body').append(myFrame);

并且您可以隐藏dom 的其余部分