javascript – Safari扩展显示Popover不同的窗口

我正在尝试构建一个Safari扩展,当用户点击Command B时,它将显示popover.使用下面的代码可以工作,但总是在不同的窗口显示弹出窗口,而不是当前的窗口/选项卡.我希望它在当前窗口上显示popover,而不是切换到另一个窗口,并在那里打开popover.如果只有一个Safari窗口打开,但是当多个窗口打开时开始出现问题,它的工作效果很好.

有任何想法吗?

全球页面文件

<script>
    safari.application.addEventListener('message',function (e) {
        if (e.name == 'Show Popover') {
            safari.extension.toolbaritems[0].showPopover();
        }
    },false);
</script>

注入内容

document.addEventListener("keydown",keydown);

function keydown(event) {
    if ( event.MetaKey && event.keyCode == 66) {
      event.preventDefault();
      safari.self.tab.dispatchMessage('Show Popover',{});
    }
}

解决方法

这是因为您在此处手动选择第一个toolbarItem;
safari.extension.toolbaritems[0].showPopover();

您需要确定popover需要显示哪个toolbarItem;

这样的东西

var toolBarID = 'my_id';
var activeItem = safari.extension.toolbaritems.filter(function (button) {
    return button.identifier == toolBarID && button.browserWindow == safari.application.activebrowserWindow;
})[0];

然后使用此对象进行showPopover函数;

activeItem.showPopover();

希望这可以帮助

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...