Safari扩展显示Popover不同的窗口

Cha*_*ish 9 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>
Run Code Online (Sandbox Code Playgroud)

注入的内容:

document.addEventListener("keydown", keydown);

function keydown(event) {
    if ( event.metaKey && event.keyCode == 66) {
      event.preventDefault();
      safari.self.tab.dispatchMessage('Show Popover', {});
    }
}
Run Code Online (Sandbox Code Playgroud)

Jay*_*mon 6

这是因为你在这里手动选择第一个toolbarItem;

safari.extension.toolbarItems[0].showPopover(); 
Run Code Online (Sandbox Code Playgroud)

您需要确定弹出窗口需要出现的toolbarItem;

像这样的东西;

var toolBarID = 'my_id';
var activeItem = safari.extension.toolbarItems.filter(function (button) {
    return button.identifier == toolBarID && button.browserWindow == safari.application.activeBrowserWindow;
})[0];
Run Code Online (Sandbox Code Playgroud)

然后,您可以将此对象用于该showPopover函数;

activeItem.showPopover();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助