javascript - 如何使用键盘快捷键打开弹出窗口?

标签 javascript css safari-extension

<分区>

Possible Duplicate:
Keyboard shortcuts with jQuery

我想使用快捷键而不是单击工具栏上的图标来显示弹出窗口。 你有什么好主意吗? 感谢您的帮助。

最佳答案

Abody97 的回答告诉你如何判断某个组合键是否被按下。如果您不确定如何使用该组合键来显示弹出框,这就是您所需要的。不幸的是,Safari 使这变得不必要地复杂化。

在全局脚本中,您需要如下所示的函数来显示弹出框,给定它的 ID 和应该显示它的工具栏项的 ID:

function showPopover(toolbarItemId, popoverId) {
    var toolbarItem = safari.extension.toolbarItems.filter(function (button) {
        return button.identifier == toolbarItemId && button.browserWindow == safari.application.activeBrowserWindow;
    })[0];
    var popover = safari.extension.popovers.filter(function (popover) {
        return popover.identifier == popoverId;
    })[0];
    toolbarItem.popover = popover;
    toolbarItem.showPopover();  
}

您还需要在全局脚本的消息监听器中调用此函数的代码,如下所示(此示例不假设您已经有一个消息监听器):

safari.application.addEventListener('message', function (e) {
    if (e.name == 'Show Popover') {
        showPopover(e.message.toolbarItemId, e.message.popoverId);
    }
}, false);

最后,在你注入(inject)的脚本中,监听组合键的函数需要调用dispatchMessage,如下:

safari.self.tab.dispatchMessage('Show Popover', {
    toolbarItemId : 'my_pretty_toolbar_item',
    popoverId     : 'my_pretty_popover'
});

(将其替换为 Abody97 代码示例中的 showPopUp()。)

注意:如果您只有一个工具栏项和一个弹出窗口(并且从不打算添加更多),那么它会变得更加简单。假设您已经将弹出窗口分配给 Extension Builder 中的工具栏项,您可以只使用

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

在全局消息监听器中代替对 showPopover 的调用,并在注入(inject)脚本中省略对 dispatchMessage 的调用中的消息值。

关于javascript - 如何使用键盘快捷键打开弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12497414/

相关文章:

javascript - openpgp.js:从私钥文本字符串生成公钥文本字符串

javascript - 使用 jquery 对 json 数据进行分组

javascript - 焦点不适用于输入

javascript - 图像显示一些乱码值

javascript - 如何在未选中单选按钮时隐藏内容并允许查看其他内容

javascript - 如何使用javascript将对象存储在数组中

javascript - 使用弹出框内的按钮单击关闭 Safari 弹出框

safari - 火狐浏览器大约是:config for Safari

javascript - 如何仅使用 Javascript 动态创建带有上一个和下一个按钮的图像-视频缩略图 slider ?

html - 在没有脚本的情况下创建引用其他文本的 Vanilla 工具提示/弹出窗口