chrome扩展命令(热键)

时间:2014-05-14 14:34:53

标签: javascript google-chrome google-chrome-extension

我正在尝试编写一个扩展程序,该扩展程序将弹出并弹出侧栏类型视图,以便快速管理我们的人力资源帮助中心。

无论如何,我已经采取了一些现有的东西,并修改它来做我想要的。我打算比现在更多地修改它,但是,在我去找老板然后说LOOK之前,我想确保功能在那里! SEE!

我已经掌握了使用Chrome浏览器操作图标的基本想法。没问题。当我尝试启用也会打开扩展程序的热键时,会出现主要问题。它只是不起作用,我已经多次把头撞到我的桌子上,我需要一些外面的帮助。

无论如何这里是我处理热键的清单部分。

清单

    "commands": {
    "toggle-feature": {
        "suggested_key": {
            "default": "Ctrl+Shift+0",
            "mac": "Command+Shift+0"
        },
        "description": "Toggle the helpcenter screen",
        "global": true
    },
    "_execute_browser_action": {
        "suggested_key": {
            "windows": "Ctrl+Shift+9",
            "mac": "Command+Shift+9",
            "chromeos": "Ctrl+Shift+9",
            "linux": "Ctrl+Shift+9"
        }
    }

正如你所看到的,我非常绝望,并为网络上的每个系统添加了热键,并对它们进行了全部尝试。

background.js

chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.sendMessage(tab.id, { action: "toggleSidebar" });
});

chrome.commands.onCommand.addListener(function(tabh) {
        chrome.tabs.sendMessage(tabh.id, { action: "toggleSidebarhkey" });
});

第二行可能完全不正确,我已经多次尝试将信息传递给扩展程序。第一行正确处理扩展的工作一半。

content.js

var sidebarURL = "help center server";

var isSidebarOpen = false;
var sidebar = createSidebar();

/* Create a pop-out */
function createSidebar() {
    var sb = document.createElement("iframe");
    sb.id = "mySidebar";
    sb.src = sidebarURL;
    sb.style.cssText = ""
        + "border:   3px groove;\n"
        + "width:    50%;\n"
        + "height:   100%;\n"
        + "position: fixed;\n"
        + "top:      0px;\n"
        + "left:     0px;\n"
        + "z-index:  9999;\n"
        + "";
    return sb;
}

/* Show/Hide the pop-out */
function toggleSidebar() {
    if (isSidebarOpen) {
        document.body.removeChild(sidebar);
    } else {
        document.body.appendChild(sidebar);
    }
    isSidebarOpen = !isSidebarOpen;
}

**这里我遇到了麻烦** 我复制并粘贴了上面的代码,并在background.js屏幕中添加了标识符。我离开了剩下的部分,因为它应该只使用当前值来决定是要关闭它还是打开它。


/* Show / Hide the pop-out via hotkey */
function toggleSidebarhkey() {
    if (isSidebarOpen) {
        document.body.removeChild(sidebar);
    } else {
        document.body.appendChild(sidebar);
    }
    isSidebarOpen = !isSidebarOpen;
}

/* Listen for message from the background-page and toggle the SideBar */
    chrome.runtime.onMessage.addListener(function(msg) {
    if (msg.action && (msg.action == "toggleSidebar")) {
        toggleSidebar();
    }
});

** HOT KEY LISTENER ** 再一次这部分可能是错的,但是我已经把它弄得太过分了,试图让它发挥作用我怀疑它的任何一部分都是正确的。


/* Listen for message from the background-page and toggle the SideBar via hotkey */
chrome.runtime.onMessage.addListener(function(msg) {
    if (msg.action && (msg.action == "toggleSidebarhkey")) {
        toggleSidebarhkey();
    }
});

说实话,我完全陷入困境,我想很多人都在想,“把这个想法当作老板!”并且“你的老板不会知道!”但是我想要额外的冷却因素,不必追捕按钮,轻松访问帮助中心门户网站中的HR内容。一旦我获得“嘿看!!”的基本功能然后我会扩展,也许添加一个面板而不是弹出窗口(比如google keep或hangouts)谁知道,但我首先需要一个概念证明,我讨厌以这种方式留下未完成的东西。

1 个答案:

答案 0 :(得分:2)

正如docs on chrome.command解释的那样,onMessage侦听器的回调获取命令作为参数,而不是Tab对象。

因此,在回调中你需要确定哪个标签处于活动状态:

chrome.commands.onCommand.addListener( function(command) {
    if(command === "toggle-feature"){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, { action: "toggleSidebarhkey" });
        });
    }
});