Safari扩展显示Popover不同的窗口

时间:2016-08-15 17:51:20

标签: javascript safari-extension

我正在尝试构建Safari扩展,当用户点击Command + B时​​,它会显示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', {});
    }
}

1 个答案:

答案 0 :(得分:6)

这是因为您在此处手动选择第一个toolbarItem;

safari.extension.toolbarItems[0].showPopover(); 

您需要确定弹出窗口需要显示哪个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();

希望这有帮助