我正在尝试构建一个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();
希望这可以帮助