2014-05-14 117 views
0

我正在嘗試編寫一個擴展功能,可以彈出並彈出側欄類型視圖,以便快速管理我們的HR幫助中心。鉻擴展命令(熱鍵)

無論如何,我採取了一些現有的東西,並修改它做我想做的。我打算對它進行修改,甚至超過我目前的修改,但是,在我去找我的老闆並說LOOK之前,我想確保其功能在那裏。看到!

我已經基本瞭解如何使用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鍵偵聽器** 再次這一部分可能是錯誤的,因爲地獄,但我已經有這麼多嘗試,使其工作,我懷疑任何部分搞砸它是正確的。


/* 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(); 
    } 
}); 

說實話,我完全卡住,我猜想你們中間很多人都在思考,「走的想法,因爲它是老闆!」和「你的老闆不會知道!」但我想要額外的酷炫因素,無需搜索按鈕並輕鬆訪問幫助中心門戶中的人力資源。一旦我獲得了「嘿看!!」的基本功能那麼我會擴展,可能會添加一個面板,而不是彈出窗口(如谷歌保留或環聊)誰知道,但我首先需要一個概念證明,我討厭以這種方式未完成的事情。

+0

歡迎SO!我提交了一個編輯您的修補程序塊代碼格式(它不是代碼塊的反色,但4空格縮進)。如果你還可以編輯你的帖子來刪除/減少背景故事(這不是很有用),這將是很好的。 – Xan

+0

1.你只需要一個onMessage監聽器......它可以處理所有傳入的消息2. onCommand監聽器回調函數沒有tab作爲參數,而是命令(就像你的情況下的'toggle-feature') – devnull69

+0

@ devnull69避免在評論中回答問題。 – Xan

回答

1

正如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" }); 
     }); 
    } 
}); 
+0

有趣的是,在閱讀文檔時,我一定錯過了該部分。謝謝 – user3637006

+0

好吧,沒有代碼錯誤,並且所有內容似乎都可以正確編譯並加載到幕後,但當我點擊熱鍵時仍然無法加載彈出窗口。我會一直用棍子戳它,我敢肯定,你已經指出了我正確的方向。如果我知道了,我會在明天(或更早)報告。 – user3637006

+0

正如[這裏](http://stackoverflow.com/questions/18132873/chrome-commands-keyboard-shortcuts-not-working-for-me)所述,嘗試卸載/安裝您的擴展,而不是隻是重新加載,以正確地註冊熱鍵。另外,請仔細閱讀有關'_execute_browser_action'命令的信息。它將打開彈出窗口(如果存在),並且不會觸發'chrome.browserAction.onClicked'。 – Xan