Google Chrome рдПрдХреНрд╕рдЯреЗрдВрд╢рди: рд╣реЙрдЯ рдХреА рдмрдирд╛рдирд╛

рдирдорд╕реНрдХрд╛рд░, рдкреНрд░рд┐рдп рд╣рднреНрд░рд╡рдЪрдиред
Google Chrome рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рдФрд░ рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ред
рдЗрд╕ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ, "рд╡реИрд╢реНрд╡рд┐рдХ" рдмреНрд░рд╛рдЙрдЬрд╝рд░-рд╕реНрддрд░реАрдп рд╣реЙрдЯрдХреАрдЬрд╝ред

рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдп рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рд╡реИрд╢реНрд╡рд┐рдХ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдкрд╛рд╕ рд╡реИрд╢реНрд╡рд┐рдХ рдЧрд░реНрдо рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред
рд╡рд┐рд╕реНрддрд╛рд░
рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдпрд╣ рдорд╛рдорд▓рд╛ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рддрдХ рд╕реЛрдЪрд╛ рдерд╛ред рдЕрдм рдПрдкреАрдЖрдИ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЯреАрдо рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡реЗ рдкреНрд░рдХрдЯ рдореЗрдВ рдХрдареЛрд░-рдХреЛрдбрд┐рдд рд╣реИрдВ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд▓рдЪреАрд▓рд╛рдкрди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдВрдбреЛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЙрдЯ рдХреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣ рдкреЛрд╕реНрдЯ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ Google рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреЗрдЬ рд░рд╣рд╛ рд╣реВрдВред

рд▓реЗрдХрд┐рди рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЗ рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдлреЛрдХрд╕ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реИрдВрдбрд▓рд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдирдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЙрдЯрдХреА рдХреЛ рдУрд╡рд░рд▓реИрдк рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореЗрдВ StopDefault рдХреЗ рд╕рд╛рде рдПрдХ рдХреНрд▓рд┐рдХ + Ctrl + рдЕрдВрдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рддреЛ рдЯреИрдм рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реЙрдЯрдХреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдпрджрд┐ рдРрд╕реЗ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдлрд╝реЛрдХрд╕ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рдЙрд╕реЗ рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕рд╛рдордЧреНрд░реА-рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреЛ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реЛрдЧреА, рдЗрд╕реЗ рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдкреЗрдЬ рдореЗрдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ, рдФрд░ рдХреАрдмреЛрд░реНрдб рд╢реЙрд░реНрдЯрдХрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░реЗрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкреЛрд░реНрдЯреЗрдмрд▓ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

mainfest.json
{ ... "content_scripts": [ { "all_frames": true, //,       ,     iframe "js": ["js/hotkeys.js" ], //,     "matches": [ "http://*/*", "https://*/*" ], //    "run_at": "document_end" } ], ... 

рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рд╕рднреА рдЦреБрд▓реЗ рдкреГрд╖реНрдареЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реИрдВрдбрд▓рд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкрдВрдЬреАрдХреГрдд рд╣реИред

рд╣реЙрдЯрдХреАрдЬ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд░рдЪрдирд╛
 if(!EXT_HOTKEY_JS_INSERTED){ var EXT_HOTKEY_JS_INSERTED = true; var hotkeys = ''; var messages = ''; var timeout = ''; chrome.extension.sendRequest({operation: "hotkeys"}, function(response) { //       if (response) if (response.hotkeys){ hotkeys = JSON.parse(response.hotkeys); var d = document.createElement('DIV'); //       d.id = "hotkeyresponder"; //+: , ,  z-index document.body.appendChild(d); } }); document.addEventListener('keydown', event_handleKeyDownEvent, true); //,        function event_handleKeyDownEvent(e){ if (!hotkeys) return true; var c=0; var a=0; var s=0; var k = e.keyCode; if (e.shiftKey) s = 1; if (e.altKey) a = 1; if (e.ctrlKey) c = 1; if (k==27 && !c && !a && !s){ if (document.getElementById('hotkeyresponder').style.display!='none'){ //    Esc document.getElementById('hotkeyresponder').style.display="none"; e.preventDefault(); e.cancelBubble = true; e.bubbles = false; return false; } } for (var name in hotkeys){ if (hotkeys.hasOwnProperty(name)){ if (hotkeys[name].c == c && hotkeys[name].a == a && hotkeys[name].s == s){ // ,   ,  if (name == 'selectProfile' && k > 48 && k < 58 && (c || a || s)){ //   <+> chrome.extension.sendRequest({operation: "hotkey", key:name, id:(k-48)}, function(response) { responseHotkey(name,response.status,response.message); }); e.preventDefault(); e.cancelBubble = true; e.bubbles = false; return false; } else if (hotkeys[name].k==k){ //       .     ,     if (name=='toggleBodyi'){ document.getElementById('togglebody').onclick(); } //  ,       (toggle - ,  DOM, etc.) else{ // ,      chrome.extension.sendRequest({operation: "hotkey", key:name}, function(response) { responseHotkey('pp',response.status,response.message); }); } e.preventDefault(); e.cancelBubble = true; e.bubbles = false; return false; } else{ continue; } } } } } function responseHotkey(type,status,message){ //     if (status == 'OK' && message){ document.getElementById('hotkeyresponder').innerHTML = message; document.getElementById('hotkeyresponder').style.display = 'block'; if (timeout) clearTimeout(timeout); timeout = setTimeout(function(){document.getElementById('hotkeyresponder').style.display='none';},2000); } } } 

рдЙрдкрд░реЛрдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдереЛрдбрд╝реА рдЕрд▓рдЧ рд╣реЙрдЯрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рд╕рдВрд╢реНрд▓реЗрд╖рдг рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬрдм рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╕рднреА рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ (рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рдмрд┐рдирд╛) рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЧрд░реНрдо рдХреБрдВрдЬреА рдХреЗ рд╕рднреА 4 рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди DOM рдореЗрдВ рдХреЛрдИ рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рд╢рд░реНрдд рдмреНрд▓реЙрдХ, рд╣реЙрдЯрдХреА рдХреЗ рдирд╛рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЦрдВрдбрд┐рдд рдкреГрд╖реНрдарднреВрдорд┐ред js
 chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { loadSettings(); //  if (request.operation == 'hotkeys'){ //     sendResponse({hotkeys:localStorage.hotkeys}); } else if (request.operation == 'hotkey'){ //   if (request.key == 'selectProfile'){ //  } //    } else{ //sendResponse({}); } }); 

рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ sendRequest рдФрд░ onRequest рд╕рдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде sendMessage рдкрдХреНрд╖ рдореЗрдВ рдкрджрд╛рд╡рдирдд onRequest ред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдВрдд рддрдХ рдирд╣реАрдВ рджреЗрдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрднреА рднреА рджреГрд╢реНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рд░реВрдк рдореЗрдВ (рдпрджрд┐ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВ), рддреЛ рдЪрд╛рдмрд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд╛рд▓реВ рд╣реИрдВред



рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдпрд╣рд╛рдВ, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд╕рдм рдХреБрдЫ рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣реИред рдпрджрд┐ рдХрдИ рдХреБрдВрдЬрд┐рдпрд╛рдБ рд╣реИрдВ, рддреЛ рдпрд╣ рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред
рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд┐рд╕реА рдХреЛ рдЕрдкрдиреА рдХреГрддрд┐рдпреЛрдВ рдореЗрдВ рджреЛрд╣рд░рд╛рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ - рдореИрдВ рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рджреЗ рджреЗрдВрдЧреЗред
рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╕реЗрдЯрд┐рдВрдЧ рдкреЗрдЬ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 { ... "options_page": "options.html", ... } 

HTML рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдПрдХ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╣реИред рд╕рдм рдХреБрдЫ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдмрдирддрд╛ рд╣реИред
options.html
 <html> <head> <title>Hotkeys</title> <script type="text/javascript" src="js/tools.js"></script> <script type="text/javascript" src="js/options.js"></script> </head> <body> <!--  header'  . --> <div id="tab1"> <p style="margin-top:0;"> -   </p> </div> </body> </html> 

options.js
рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛: рдореБрдЦреНрдп рдирд╛рдо, рд╡рд░реНрддрдорд╛рди рд╣реЙрдЯрдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕, рдФрд░ рд╕рдорд░реНрдерд┐рдд рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдирд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреАред
 ... var keycodes = ['','','','','','','','','','Tab','','','','Enter','','','','','','','','','','','','','','Escape','','','','','Space','Page Up','Page Down','End','Home','Left','Up','Right','Down','','','','','Insert','Delete','','0','1','2','3','4','5','6','7','8','9','','','','','','','','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','MainM Left','MainM Right','Menu','','','NumPad 0','NumPad 1','NumPad 2','NumPad 3','NumPad 4','NumPad 5','NumPad 6','NumPad 7','NumPad 8','NumPad 9','NumPad *','NumPad +','','NumPad -','NumPad ,','NumPad /','F1','F2','F3','F4','F5','F6','F7','F8','F9','F10','F11','F12','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','','=','','-','','','~','','','','','','','','','','','','','','','','','','','','','','','','','','','','\\']; var hotkeys = JSON.parse(localStorage.hotkeys); var phk = ['prevProfile', 'nextProfile', 'selectProfile', 'openOpts', 'toggleHideWidget', 'toggleWidget', 'toggleInCT', 'toggleBody', 'openWidget', 'toggleBodyi', 'actMC', 'actMG']; 

рдкреГрд╖реНрда рдЖрд░рдВрднреАрдХрд░рдг рд╕рдорд╛рд░реЛрд╣: HTML рднрд░рдирд╛, рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓рдЯрдХрд╛рдирд╛, рд╡рд░реНрддрдорд╛рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ред
 initt = function(){ ... for (var i = 0; i < phk.length;i++){ var d = document.createElement('DIV'); d.innerHTML = '<h4 style="margin:0;">'+_getMessage(phk[i]+'_title')+'</h4><input type="checkbox" id="'+phk[i]+'_c"><label for="'+phk[i]+'_c">Ctrl <b>+</b></label><input type="checkbox" id="'+phk[i]+'_a"><label for="'+phk[i]+'_a">Alt <b>+</b></label><input type="checkbox" id="'+phk[i]+'_s"><label for="'+phk[i]+'_s">Shift <b>+</b></label>'+((phk[i]=='selectProfile')?('<key 1-9><input type="hidden" id="'+phk[i]+'_k" value="$"> '):('<input type="text" id="'+phk[i]+'_k">'))+'<img src="img/delete.gif" id="'+phk[i]+'_imgerr" class="err_disp" style="height:16px;display:none;" /><img src="img/ok.png" id="'+phk[i]+'_imgok" class="err_disp" style="height:16px;display:none;" /><br/><span id="result_'+phk[i]+'" class="err_disp" style="color:red"></span>'; document.getElementById('tab1').appendChild(d); } document.getElementById('tab1').innerHTML+='<button>'+_getMessage('opts_13')+'</button>'; for (var i = 0; i < phk.length;i++){ if (hotkeys[phk[i]]){ document.getElementById(phk[i]+'_c').checked = (hotkeys[phk[i]]['c']?true:false); document.getElementById(phk[i]+'_a').checked = (hotkeys[phk[i]]['a']?true:false); document.getElementById(phk[i]+'_s').checked = (hotkeys[phk[i]]['s']?true:false); if (phk[i]!='selectProfile') document.getElementById(phk[i]+'_k').value = keycodes[hotkeys[phk[i]]['k']]; } } ... var m = document.querySelectorAll('input[type=text]') for (var i = 0; i < m.length; i++){ m[i].addEventListener('keydown',function(event){this.value=(keycodes[event.keyCode]?keycodes[event.keyCode]:'');prevDef(event);return false},false); } ... } 

рдлрд╝рдВрдХреНрд╢рди рд╕рд╣реЗрдЬреЗрдВред рдпрд╣ рд╡реИрдзрддрд╛ рдФрд░ рдЯрдХрд░рд╛рд╡ рдХреА рдЬрд╛рдБрдЪ рднреА рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╣реА рд╕рдВрдпреЛрдЬрди рддреБрд░рдВрдд рд╕рд╣реЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рддрджрдиреБрд╕рд╛рд░ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
 save = function(){ //     var err_els = document.getElementsByClassName('err_disp'); for (var i = 0; i < err_els.length; i++){ if (i%3==2) err_els[i].innerHTML = ''; else err_els.style.display = 'none'; } var hktp = {}; var hkts = {}; //      for (var i = 0; i < phk.length; i++){ if ((document.getElementById(phk[i]+'_c').checked || document.getElementById(phk[i]+'_a').checked || document.getElementById(phk[i]+'_s').checked) && document.getElementById(phk[i]+'_k').value){ //  hktp[phk[i]] = { c:document.getElementById(phk[i]+'_c').checked, a:document.getElementById(phk[i]+'_a').checked, s:document.getElementById(phk[i]+'_s').checked, k:document.getElementById(phk[i]+'_k').value, }; } else{ //   -  if (document.getElementById(phk[i]+'_c').checked || document.getElementById(phk[i]+'_a').checked || document.getElementById(phk[i]+'_s').checked || (document.getElementById(phk[i]+'_k').value && document.getElementById(phk[i]+'_k').value!='$')){ document.getElementById('result_'+phk[i]).innerHTML = _getMessage('opts_12'); document.getElementById(phk[i]+'_imgerr').style.display = 'inline'; } } } //  for (var i = 0; i < phk.length-1; i++){ for (var j = i+1; j < phk.length; j++){ if (hktp[phk[i]] && hktp[phk[j]]) if (hktp[phk[i]].c == hktp[phk[j]].c && hktp[phk[i]].a == hktp[phk[j]].a && hktp[phk[i]].s == hktp[phk[j]].s && (hktp[phk[i]].k == hktp[phk[j]].k || ((hktp[phk[i]].k == '$' || hktp[phk[j]].k == '$') && ((hktp[phk[i]].k*1>0 && hktp[phk[i]].k*1<=9) || (hktp[phk[j]].k*1>0 && hktp[phk[j]].k*1<=9))))){ document.getElementById('result_'+phk[i]).innerHTML = _getMessage('opts_11'); document.getElementById(phk[i]+'_imgerr').style.display = 'inline'; document.getElementById('result_'+phk[j]).innerHTML = _getMessage('opts_11'); document.getElementById(phk[j]+'_imgerr').style.display = 'inline'; hktp[phk[i]] = false; hktp[phk[j]] = false; } } } // ""    for (var name in hktp){ if (hktp.hasOwnProperty(name) && hktp[name]){ document.getElementById(phk[i]+'_imgok').style.display = 'inline'; hkts[name] = { c:(document.getElementById(name+'_c').checked?1:0), a:(document.getElementById(name+'_a').checked?1:0), s:(document.getElementById(name+'_s').checked?1:0), k:keycodes.in_array(document.getElementById(name+'_k').value), } } } localStorage.hotkeys = JSON.stringify(hkts); // } 

рдпрджрд┐ рдЖрдк _getMessage рдЬреИрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реИрдВ, рддреЛ рдпреЗ i18n рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рд╣реИрдВ (рдореЗрд░реА рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рджреЗрдЦреЗрдВ )
рдпрд╣рд╛рдБ рдпрд╣ рдХрд╛рдо рдкрд░ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред


рд╡рд╣ рд╕рдм рд╣реИред рдЗрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдпрд╣ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдпрдерд╛рд░реНрдерд╡рд╛рджреА рд╣реИред рдЗрд╕ рд░реВрдк рдореЗрдВ, рд╣реЙрдЯрдХреА рд╕рдкреЛрд░реНрдЯ рд╕рд┐рд╕реНрдЯрдо рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдореЗрдВ рд╕рдореНрдорд╛рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореЗрд░реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИ рд╡рд╣ рд╣реИ рдкреЙрдкрдЕрдк рд╡рд┐рдВрдбреЛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ред рдореБрдЭреЗ рд╕рдВрдмрдВрдзрд┐рдд API рдкрджреНрдзрддрд┐рдпрд╛рдВ рдирд╣реАрдВ рдорд┐рд▓реАрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬрд╣рд╛рдВ рдореБрдЭреЗ рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдВрдпреЛрдЬрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред

Source: https://habr.com/ru/post/In171565/


All Articles