рд╕рдорд╛рди-рдЙрддреНрдкрддреНрддрд┐-рдиреАрддрд┐ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдлрд╝рдХреЙрдХ; Google Chrome рдФрд░ рдЕрдиреНрдп

debuger

рдЙрджреНрджреЗрд╢реНрдп:
- рдПрдХ REST рд╕рд░реНрд╡рд░ рд╣реИ
- рдПрдХ рдкреЗрдЬ рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (HTML / CSS / рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╣реИ рдЬреЛ XMLHttpRequest рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИ
- рдЖрдкрдХреЛ рдПрдХ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ



рдЬрдм рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдРрд╕реЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рддреЛ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ:
- рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдпрд╣реЛрд╕реНрдЯ рдкрд░ рдкрд░реАрдХреНрд╖рдг рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рдПрдВ
- XMLHttpRequest2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖рдХ "рдЕрдиреБрдорддрд┐-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдЙрддреНрдкрддреНрддрд┐: *" рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмреИрдХ-рдПрдВрдб рдкреВрдЫреЗрдВ

рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдФрд░ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рднреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ - "рдЕрдиреБрдорддрд┐-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдЙрддреНрдкрддреНрддрд┐: *" рд╕реЗрдЯ рдХрд░рдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдмреИрдХ-рдПрдВрдб рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдлрд┐рдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА ред

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

рд╡рд╣ рд╕рдм рд╣реИ!

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

Chrome рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдмреАрдЪ, рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореБрдЭреЗ рдПрдХ рднреА рдРрд╕рд╛ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЬреЛ рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рд╣реЗрдбрд░ рдХреЛ рдмрджрд▓ рд╕рдХреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрдкрдиреА рдмрд╛рдЗрдХ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рд╡рд┐рд╕реНрддрд╛рд░ рдФрд░ github рдХрд╛ рд▓рд┐рдВрдХ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓ рдФрд░ рдпреБрд╡рд╛ рд╣реИ

рдХреНрд░реЛрдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди
manifest.json
{ "name": "Allow-Control-Allow-Origin: *", "version": "1.0", "manifest_version": 2, "description": "Allow to you request any site with ajax from any source. Add to response - 'Allow-Control-Allow-Origin: *' header", "background": { //      "scripts": ["background.js"] }, "browser_action": { //      , "default_popup"    "default_icon": "off.gif", "default_title": "Allow-Control-Allow-Origin" }, "permissions": [ "storage", //  localStorage "webRequest", // webRequest API "webRequestBlocking", "*://*/*" //      ], "web_accessible_resources": [ //  -             "on.gif","off.gif" ] } 

рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ:
- "рдкреГрд╖реНрдарднреВрдорд┐" - рдПрдХ , рджреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдЬрдм рдХреНрд░реЛрдо рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдХрд╛рдо рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд▓рд┐рдПред
"рдЕрдиреБрдорддрд┐рдпрд╛рдБ": ["*: // * / *"] рдЙрди рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рдкрддреЗ рдЬрд╣рд╛рдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЬрд╣рд╛рдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдВрдЪ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред "Content_scripts" рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ: [...],
рдпрджрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЦреБрд▓реА рд╕рд╛рдЗрдЯ рдХреЗ рдкреГрд╖реНрдареЛрдВ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд╛рдЗрдЯ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЕрдкрдиреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдЗрдЯ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ)
- "Browser_action" - рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдкреЗрдЬ_рдПрдХреНрд╢рди рдХрд╛ рд╡рд┐рдХрд▓реНрдк
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдкреЗрдЬ_рдПрдХреНрд╢рди рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░_рдПрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- WebRequest API рдФрд░ webRequestBlocking - рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрдбрд░ рдХреЛ рдмрджрд▓реЗрдВ
- "web_accessible_resources" - рдЕрдиреНрдпрдерд╛ рдЪрд┐рддреНрд░ рдХрд╛ рдкрде рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рд░рд╛рд╕реНрддрд╛ рдЪрд╛рд╣рд┐рдП:
рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐: url ("/ sprites.png");
рд╕реАрдПрд╕рдПрд╕
рдкреГрд╖реНрдарднреВрдорд┐-рдЫрд╡рд┐: url ('рдХреНрд░реЛрдо-рдПрдХреНрд╕рдЯреЗрдВрд╢рди: //__MSG_@@extension_id__/sprites.png');
рдЬреЗ рдПрд╕
var url = chrome.extension.getURL ('sprites.png');

backgound.js
 var requestListener = function(details){ var flag = false, rule = { name: "Origin", value: "http://evil.com/" }; for (var i = 0; i < details.requestHeaders.length; ++i) { if (details.requestHeaders[i].name === rule.name) { flag = true; details.requestHeaders[i].value = rule.value; break; } } if(!flag) details.requestHeaders.push(rule); return {requestHeaders: details.requestHeaders}; }; var responseListener = function(details){ var rule = { "name": "Access-Control-Allow-Origin", "value": "*" }; details.responseHeaders.push(rule); return {responseHeaders: details.responseHeaders}; }; /*On install*/ chrome.runtime.onInstalled.addListener(function(){ localStorage.active = false; }); /*Icon change*/ chrome.browserAction.onClicked.addListener(function(tab){ if(localStorage.active === "true"){ localStorage.active = false; chrome.browserAction.setIcon({path: "off.gif"}); /*Remove Response Listener*/ chrome.webRequest.onHeadersReceived.removeListener(responseListener); chrome.webRequest.onBeforeSendHeaders.removeListener(requestListener); }else{ localStorage.active = true; chrome.browserAction.setIcon({path: "on.gif"}); /*Add Response Listener*/ chrome.webRequest.onHeadersReceived.addListener(responseListener,{ urls: [ "*://*/*" ] },["blocking", "responseHeaders"]); chrome.webRequest.onBeforeSendHeaders.addListener(requestListener,{ urls: [ "*://*/*" ] },["requestHeaders"]); } }); 


рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА:
OnHeadersReceived рдФрд░ onBeforeSendHeaders рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдиреЗ рдХреНрд░рдорд╢рдГ рд░рд┐рд╕реНрдкрд╛рдВрд╕рд▓рд┐рдВрдЯрд░ рдФрд░ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрд▓реАрдирд░ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд▓рдЧрд╛рдпрд╛, рддрд╛рдХрд┐ рд╣реЗрдбрд░ рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрд╡рд┐рдЪ рдХреЛ рдмрджрд▓рд╛ рди рдЬрд╛рдПред рдШреБрдбрд╝рд╕рд╡рд╛рд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд╣рдЯрд╛рдПрдВ

chrome.runtime.onInstalled - рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рд╡рд╣рд╛рдБ рдЖрдк рдкреНрд▓рдЧрдЗрди рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

chrome.browserAction.onClicked .addListener - рдЬрдм рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдИрд╡реЗрдВрдЯ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЪрд╛рд▓реВ рдФрд░ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ

рдЕрдЧрд░ (localStorage.active === "рд╕рдЪ") - рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╣рд░ рдмрд╛рд░ рдореИрдВ рдЗрд╕ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЛрдХрд▓рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ <string> рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ onBeforeSendHeaders рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ Chrome рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдореИрдВ рдХреНрд░реЛрдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдзреНрд╡рдЬ рд╣реЛрддрд╛ рд╣реИ - рдлрд╛рдЗрд▓-рдПрдХреНрд╕реЗрд╕-рд╕реЗ-рдлрд╛рдЗрд▓реНрд╕

рдЖрдк рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдЭрдВрдбреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ ред

рдореЗрд░реЗ рдкрд╛рд╕ рдпреЗ рд╣реИрдВ:
рд╢реЙрд░реНрдЯрдХрдЯ рдкрд░ рд░рд╛рдЗрдЯ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ -> рдЧреБрдг -> рд▓рдХреНрд╖реНрдп
C: \ Users \ Ololo \ AppData \ Local \ Google \ Chrome \ Application \ chrome.exe --allow-file-access-from-files --remote-debugging-port = 9222 --allow-file-access-allow -рдХреНрд░реЙрд╕ рдореВрд▓ рдХреЗ рд▓реЗрдЦрди-рд╢реАрдШреНрд░

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

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

рдкреАрдПрд╕рдПрд╕
рдпрд╣ рд╡рд┐рд╖рдп рд╡рд┐рд╖рдп рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдХреЛрдИ рдЪрд╛рд╣рддрд╛ рдерд╛ рдФрд░ рднреВрд▓ рдЧрдпрд╛ рдерд╛ - рдХрд▓ (21 рдЬрдирд╡рд░реА) рдЕрдЧрд▓реЗ рдорд╣реАрдиреЗ рдСрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХрд╛ рдЕрдЧрд▓рд╛ рджреМрд░ рд╢реБрд░реВ рд╣реБрдЖ
рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рдкреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХреБрдЫ рд╣рдлрд╝реНрддреЗ рдХреЗ рднреАрддрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

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


All Articles