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

时间:2016-01-05 11:29:57

标签: javascript jquery google-chrome-extension

我有一些代码,我单击弹出菜单按钮,然后菜单出现,当我在菜单元素上执行下一步.click()时,它尝试使用菜单选项中的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链接并以失败告终。

1 个答案:

答案 0 :(得分:1)

如果您在浏览器的标签中加载了content script,则可以创建mouse event,然后触发事件以复制用户点击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);

第二种解决方案

如果要在同一窗口中打开网址,则可以更改窗口的位置。 (正如@ some-non-descript-user在评论中指出的那样)

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

您可以做的另一件事是在页面中使用相同的网址插入iframe。

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

你可以隐藏其余的dom