Safari 扩展显示不同的弹出框 Window
Safari Extension Showing Popover Different Window
我正在尝试构建一个 Safari 扩展,当用户点击 Command+B 时,它将显示弹出窗口。使用下面的代码它可以工作,但总是在不同的 window 而不是当前的 window/tab 上显示弹出窗口。我希望它在当前 window 上显示弹出窗口,而不是切换到另一个 window 并在那里打开弹出窗口。如果只有一个 Safari window 打开,它会完美运行,但当多个 windows 打开时,它就会开始出现问题。
有什么想法吗?
全局页面文件:
<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();
您需要确定弹出窗口需要出现在哪个 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();
希望对您有所帮助
我正在尝试构建一个 Safari 扩展,当用户点击 Command+B 时,它将显示弹出窗口。使用下面的代码它可以工作,但总是在不同的 window 而不是当前的 window/tab 上显示弹出窗口。我希望它在当前 window 上显示弹出窗口,而不是切换到另一个 window 并在那里打开弹出窗口。如果只有一个 Safari window 打开,它会完美运行,但当多个 windows 打开时,它就会开始出现问题。
有什么想法吗?
全局页面文件:
<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();
您需要确定弹出窗口需要出现在哪个 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();
希望对您有所帮助