2014-05-14 6 views
0

Google 도움말 센터의 빠른 관리를 위해 사이드 바 유형보기를 팝업 및 팝 아웃하는 확장 프로그램을 작성하려고합니다.크롬 확장 명령 (단축키)

어쨌든, 나는 기존의 것들을 가져다가 내가 원하는 것을 수정했습니다. 나는 현재 가지고있는 것보다 더 많이 수정할 계획이지만, 내 상사에게 가서 LOOK이라고 말하기 전에 기능이 있는지 확인하고 싶습니다! 만나다!

크롬의 브라우저 작업 아이콘으로 작업하는 것이 좋습니다. 거기에는 문제가 없습니다. 주요 문제는 확장 프로그램을 여는 단축키를 활성화하려고 할 때 발생합니다. 그것은 단지 작동하지 않을 것이다, 나는 나의 책상 1에 대해 내 머리를 너무 여러 번 때려 눕혔다. 그리고 나는 약간의 외부 원조가 필요하다.

아무튼 여기에 단축키를 처리하는 매니페스트 섹션이 있습니다.

"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" }); 
}); 

, 나는 그것이 너무 많은 시간 연장에 대한 정보를 전달하려고 나사 결합했습니다. 첫 번째 줄은 확장의 작업 반을 올바르게 처리합니다. HERE

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; 
} 

I **는 문제로 실행하는 곳이다 ** I 복사 아래 위의 코드를 붙여 상기 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(); 
    } 
}); 
나는 완전히 붙어있어 솔직히 말해서, 나는 당신의 많은, 생각하고 있다고 가정 "는 상사에게 그대로 생각을!" "네 사장님은 알지 못할거야!" 그러나 버튼을 찾아 다니지 않고 헬프 센터 포털의 인사 관리 기능에 쉽게 액세스 할 수있는 추가 기능을 원합니다. "hey Look !!"의 기본 기능을 얻으면 그 다음에 확장 할 예정이며, 팝업 (예 : Google Keep 또는 행 아웃) 대신 패널을 추가 할 것입니다.하지만 먼저 개념 증명이 필요하며 이런 방식으로 완료되지 않은 것을 남기는 것을 싫어합니다.

+0

에 오신 것을 환영합니다 SO를!게시물 고정 블록 코드 서식을 편집하기 위해 제출했습니다 (코드 블록은 제외하지만 4 개의 들여 쓰기가 있습니다). 뒷 이야기를 삭제/제거하기 위해 게시물을 편집 할 수도 있지만 (매우 유용하지는 않습니다.) 좋을 것입니다. – Xan

+0

1. onMessage에 대해 하나의 리스너 만 필요합니다 ... 들어오는 모든 메시지를 처리 ​​할 수 ​​있습니다. 2. onCommand 리스너 콜백은 탭을 매개 변수로 사용하지 않고 (예 :'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