{"id":166539,"date":"2013-01-22T00:52:03","date_gmt":"2013-01-21T20:52:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=166539"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=166539","title":{"rendered":"<span class=\"post_title\">Lifehack \u0434\u043b\u044f Same-Origin-Policy; Google Chrome \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/b07\/ca4\/038\/b07ca403862a9b30029a5f765a86c7a7.jpg\" alt=\"debuger\"\/><\/p>\n<p>  <b>\u0417\u0430\u0434\u0430\u0447\u0430:<\/b><br \/>   \u2014 \u0435\u0441\u0442\u044c REST-\u0441\u0435\u0440\u0432\u0435\u0440<br \/>   \u2014 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (HTML\/CSS\/Javascript) \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0435\u0440\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 XMLHttpRequest<br \/>   \u2014 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0438\u0447\u0443<\/p>\n<p>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0434 front-end \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0430 \u0432\u0441\u043a\u0438\u0434\u043a\u0443 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<br \/>   \u2014 \u043f\u043e\u0434\u043d\u044f\u0442\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0443 \u0441\u0435\u0431\u044f \u043d\u0430 localhost<br \/>   \u2014 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c Back-end \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0442\u0432\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u00abAllow-Control-Allow-Origin: *\u00bb \u0447\u0442\u043e-\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"http:\/\/habrahabr.ru\/post\/120917\/\">XMLHttpRequest2<\/a><\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d. \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u0439 \u2014 \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u00abAllow-Control-Allow-Origin: *\u00bb \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u043d\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e, \u0434\u0430 \u0438 back-end \u043c\u043e\u0436\u0435\u0442 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u043b\u0433\u043e.<\/p>\n<p>  \u0418 \u0442\u0443\u0442 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u0430 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b <i>\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u0434\u0435\u044f<\/i> \u2014 \u0430 \u0437\u0430\u0447\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0435.<\/p>\n<p>  \u041f\u0440\u043e Fiddler \u044f \u0443\u0436\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b <a href=\"http:\/\/habrahabr.ru\/post\/140147\/\">\u043f\u0438\u0441\u0430\u0442\u044c<\/a> \u043a\u043e\u0433\u0434\u0430-\u0442\u043e. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 Fiddler<\/b><\/p>\n<div class=\"spoiler_text\"> \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u0432\u0441\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u043e\u0441\u0442\u043e.<br \/>   \u2014 \u041d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0435 \u00abFilters\u00bb \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u043c Use filters<br \/>   \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u00abSet response header\u00bb \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u00abAllow-Control-Allow-Origin: *\u00bb<br \/>  <s> \u2014 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u00abSet request header\u00bb \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u0425\u0440\u043e\u043c\u0430<\/s> <i>\u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u043e\u043d \u0434\u043b\u044f \u0445\u0440\u043e\u043c\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u043e \u0444\u043b\u0430\u0433\u0438 \u0432 \u0445\u0440\u043e\u043c\u0435<\/i><br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/613\/f2e\/180\/613f2e180b91106785102e03533eaccb.jpg\"\/><br \/>  \u0412\u0441\u0435!  <\/div>\n<\/div>\n<p>  \u0411\u043e\u044e\u0441\u044c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0442\u0430\u0442\u044c\u044f \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430 \u043d\u0435 \u043e\u0446\u0435\u043d\u0438\u043b\u0430 \u0431\u044b, \u0438 \u0437\u0430\u043c\u0438\u043d\u0443\u0441\u043e\u0432\u0430\u043b\u0430 \u043c\u0435\u043d\u044f \u0438 \u043f\u043e\u0441\u0442 \u0447\u0443\u0442\u044c \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u0441 \u0424\u0438\u0434\u043b\u0435\u0440\u043e\u043c \u0438 \u043a\u0442\u043e \u043d\u0435 \u0438\u0449\u0435\u0442 \u043b\u0435\u0433\u043a\u0438\u0445 \u043f\u0443\u0442\u0435\u0439.<\/p>\n<p>  \u0421\u0440\u0435\u0434\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u0425\u0440\u043e\u043c\u0430 \u043c\u043d\u0435 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e\u0441\u044c \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0433\u043b\u043e \u0431\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c Response-\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438, \u0445\u043e\u0442\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044f \u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043a\u0430\u043b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043f\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434. <a href=\"https:\/\/chrome.google.com\/webstore\/detail\/allow-control-allow-origi\/nlfbmbojpeacfghkpbjhddihlkkiljbi\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435<\/a> \u0438 <a href=\"https:\/\/github.com\/vitvad\/Access-Control-Allow-Origin\">github \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u043c\u043e\u0434\u043d\u043e \u0438 \u043c\u043e\u043b\u043e\u0434\u0435\u0436\u043d\u043e<\/a><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f Chrome<\/b><\/p>\n<div class=\"spoiler_text\"><b><a href=\"https:\/\/developer.chrome.com\/extensions\/manifest.html\">manifest.json<\/a><\/b>  <\/p>\n<pre><code class=\"javascript\">{ \t&quot;name&quot;: &quot;Allow-Control-Allow-Origin: *&quot;, \t&quot;version&quot;: &quot;1.0&quot;, \t&quot;manifest_version&quot;: 2, \t&quot;description&quot;: &quot;Allow to you request any site with ajax from any source. Add to response - 'Allow-Control-Allow-Origin: *' header&quot;, \t&quot;background&quot;: {  \/\/ \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f  \t\t&quot;scripts&quot;: [&quot;background.js&quot;] \t}, \t&quot;browser_action&quot;: { \/\/\u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439 \u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c, &quot;default_popup&quot; \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \t&quot;default_icon&quot;: &quot;off.gif&quot;, \t&quot;default_title&quot;: &quot;Allow-Control-Allow-Origin&quot; \t}, \t&quot;permissions&quot;: [  \t\t&quot;storage&quot;,     \/\/ \u0434\u043b\u044f localStorage \t\t&quot;webRequest&quot;,    \/\/\u0434\u043b\u044f webRequest API \t\t&quot;webRequestBlocking&quot;, \t\t&quot;*:\/\/*\/*&quot; \/\/\u0445\u043e\u0447\u0443 \u043f\u043e\u0441\u044b\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441  \t], \t&quot;web_accessible_resources&quot;: [     \/\/\u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f - \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0435\u0435 \u0431\u0443\u0434\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \t\t&quot;on.gif&quot;,&quot;off.gif&quot; \t] } <\/code><\/pre>\n<p>  \u0427\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e:<br \/>   \u2014 <b>\u00abbackground\u00bb<\/b> \u2014 <a href=\"https:\/\/developer.chrome.com\/extensions\/event_pages.html\">\u043e\u0434\u0438\u043d<\/a>, <a href=\"https:\/\/developer.chrome.com\/extensions\/background_pages.html\">\u0434\u0432\u0430<\/a> \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u2014 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0425\u0440\u043e\u043c\u0430 \u0432 \u0444\u043e\u043d\u0435.<br \/>  \u0412 \u00abpermissions\u00bb: [ &quot;*:\/\/*\/*&quot;] \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0430\u0439\u0442\u043e\u0432 \u0433\u0434\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u043a\u0443\u0434\u0430 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043f\u043e\u0441\u043b\u0430\u0442\u044c ajax-\u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 <a href=\"https:\/\/developer.chrome.com\/extensions\/content_scripts.html\">\u00abcontent_scripts\u00bb<\/a>: [&#8230;],<br \/>  \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 (\u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u0445 \u0441\u0430\u0439\u0442\u0430, \u0438\u043d\u0430\u0447\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0441\u0432\u043e\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0441\u0430\u0439\u0442\u0430 \u0432 \u0441\u0432\u043e\u0435\u0439)<br \/>   \u2014 <a href=\"https:\/\/developer.chrome.com\/extensions\/browserAction.html\"><b>\u00abbrowser_action\u00bb<\/b> <\/a> \u2014 \u041d\u0443\u0436\u0435\u043d \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0443 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<br \/>  \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 <a href=\"https:\/\/developer.chrome.com\/extensions\/pageAction.html\">\u00abpage_action\u00bb<\/a><br \/>  \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e page_action \u0438 browser_action \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f<br \/>   \u2014 <a href=\"https:\/\/developer.chrome.com\/extensions\/webRequest.html\">webRequest API<\/a> \u0438 webRequestBlocking \u2014 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u043e\u0442\u0432\u0435\u0442\u0430<br \/>  &#8212;<b> \u00abweb_accessible_resources\u00bb<\/b> \u2014 \u0438\u043d\u0430\u0447\u0435 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<br \/>  <i>\u043d\u0443\u0436\u043d\u043e \u043f\u0443\u0442\u044c:<\/i><br \/>  background-image:url(&quot;\/sprites.png&quot;);<br \/>  <i>CSS<\/i><br \/>  background-image:url(&#8216;chrome-extension:\/\/__MSG_@@extension_id__\/sprites.png&#8217;);<br \/>  <i>JS<\/i><br \/>  var url = chrome.extension.getURL(&#8216;sprites.png&#8217;);<\/p>\n<p>  <b>backgound.js<\/b>  <\/p>\n<pre><code class=\"javascript\">var requestListener = function(details){ \tvar flag = false, \t\trule = { \t\t\tname: &quot;Origin&quot;, \t\t\tvalue: &quot;http:\/\/evil.com\/&quot; \t\t};  \tfor (var i = 0; i &lt; details.requestHeaders.length; ++i) { \t\tif (details.requestHeaders[i].name === rule.name) { \t\t\tflag = true; \t\t\tdetails.requestHeaders[i].value = rule.value; \t\t\tbreak; \t\t} \t} \tif(!flag) details.requestHeaders.push(rule); \treturn {requestHeaders: details.requestHeaders}; };  var responseListener = function(details){ \tvar rule = { \t\t\t&quot;name&quot;: &quot;Access-Control-Allow-Origin&quot;, \t\t\t&quot;value&quot;: &quot;*&quot; \t\t};  \tdetails.responseHeaders.push(rule);  \treturn {responseHeaders: details.responseHeaders}; };   \/*On install*\/ chrome.runtime.onInstalled.addListener(function(){ \tlocalStorage.active = false; });  \/*Icon change*\/ chrome.browserAction.onClicked.addListener(function(tab){ \tif(localStorage.active === &quot;true&quot;){ \t\tlocalStorage.active = false; \t\tchrome.browserAction.setIcon({path: &quot;off.gif&quot;});  \t\t\/*Remove Response Listener*\/ \t\tchrome.webRequest.onHeadersReceived.removeListener(responseListener); \t\tchrome.webRequest.onBeforeSendHeaders.removeListener(requestListener); \t}else{ \t\tlocalStorage.active = true; \t\tchrome.browserAction.setIcon({path: &quot;on.gif&quot;});  \t\t\/*Add Response Listener*\/ \t\tchrome.webRequest.onHeadersReceived.addListener(responseListener,{ \t\t\turls: [ \t\t\t\t&quot;*:\/\/*\/*&quot; \t\t\t] \t\t},[&quot;blocking&quot;, &quot;responseHeaders&quot;]);  \t\tchrome.webRequest.onBeforeSendHeaders.addListener(requestListener,{ \t\t\turls: [ \t\t\t\t&quot;*:\/\/*\/*&quot; \t\t\t] \t\t},[&quot;requestHeaders&quot;]); \t} }); <\/code><\/pre>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e \u043a\u043e\u0434\u0443:<br \/>  Callback&#8217;\u0438 \u0434\u043b\u044f <b>onHeadersReceived<\/b> \u0438 <b>onBeforeSendHeaders<\/b> \u0432\u044b\u043d\u0435\u0441 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 responseListener \u0438 requestListener \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043d\u0435 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c. \u0423\u0434\u0430\u043b\u044f\u0435\u043c \u043d\u0430\u0432\u0435\u0448\u0435\u043d\u043d\u044b\u0435 <a href=\"http:\/\/developer.chrome.com\/extensions\/events.html\">\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438<\/a><\/p>\n<p>  <b>chrome.runtime.onInstalled<\/b> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u0442\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c default \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/p>\n<p>  <b>chrome.browserAction.onClicked<\/b>.addListener \u2014 \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0430\u0446\u0430\u0435\u043c \u043f\u043e \u043a\u043d\u043e\u043f\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u2014 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u0430<\/p>\n<p>  <b>if(localStorage.active === \u00abtrue\u00bb)<\/b> \u2014 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0441\u044c \u043d\u0430 \u044d\u0442\u043e\u043c \u0438 \u0437\u0430\u0431\u044b\u0432\u0430\u044e \u0447\u0442\u043e \u043a\u043b\u044e\u0447\u0438 \u0432 localStorage \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 &lt;String&gt;<\/p>\n<p>  \u041f\u043e \u0441\u0443\u0442\u0438 onBeforeSendHeaders \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0425\u0440\u043e\u043c \u043d\u0435 \u0434\u0430\u0435\u0442 \u043e\u0442\u0441\u044b\u043b\u0430\u0442\u044c \u0441 localhost ajax-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c.<br \/>  \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043b \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0445\u0440\u043e\u043c\u0430 \u0443 \u043c\u0435\u043d\u044f \u0441\u0442\u043e\u0438\u0442 \u0444\u043b\u0430\u0433 &#8212;allow-file-access-from-files<\/p>\n<p>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e \u0444\u043b\u0430\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"http:\/\/peter.sh\/experiments\/chromium-command-line-switches\/\">\u0442\u0443\u0442 <\/a> \u0438 <a href=\"http:\/\/www.chromium.org\/developers\/how-tos\/run-chromium-with-flags\">\u0442\u0443\u0442<\/a><\/p>\n<p>  \u0423 \u043c\u0435\u043d\u044f \u0441\u0442\u043e\u044f\u0442 \u0442\u0430\u043a\u0438\u0435:<br \/>  <s>\u041f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043f\u043e \u044f\u0440\u043b\u044b\u043a\u0443 -&gt; Properties -&gt; Targets<\/s><br \/>  C:\\Users\\Ololo\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe <b>&#8212;allow-file-access-from-files &#8212;remote-debugging-port=9222 &#8212;allow-file-access &#8212;allow-cross-origin-auth-prompt<\/b>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f FF \u2014 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0438 \u0437\u0434\u0435\u0441\u044c \u044f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u0434\u043c\u0435\u043d\u044b \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043b\u043e\u0445\u043e \u0438\u0441\u043a\u0430\u043b. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e \u043f\u043e\u0434\u0441\u043a\u0430\u0436\u0435\u0442 \u0432\u0441\u0442\u0430\u0432\u043b\u044e \u0432 \u043f\u043e\u0441\u0442.<\/p>\n<p>  <b>P.S.<\/b><br \/>  \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043e\u0432\u0435\u0442. \u0423 \u0442\u0435\u0445 \u043a\u043e\u043c\u0443 \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u043e\u0439\u043d\u043e \u0445\u0430\u0431\u0440\u0430 \u044f \u043f\u0440\u043e\u0448\u0443 \u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f, \u043d\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u043d\u043e\u043c\u0443 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u0442\u0430\u043a \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u043a\u0430\u043a \u0432\u0430\u043c \u0438 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e (\u043c\u043d\u0435).<br \/>  \u0423 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u043e \u0438\u0434\u0435\u0435 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u0441\u0430\u0439\u0442\u0430 \u0437\u0430\u0431\u0438\u0432\u0430\u0442\u044c \u043d\u0430 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Cross-Origin_Resource_Sharing\">CORS<\/a>, \u043d\u043e \u043c\u044b \u0432\u0435\u0434\u044c \u0432\u0441\u0435 \u0447\u0435\u0441\u0442\u043d\u044b\u0435 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.    \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/166539\/\"> http:\/\/habrahabr.ru\/post\/166539\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t<img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/b07\/ca4\/038\/b07ca403862a9b30029a5f765a86c7a7.jpg\" alt=\"debuger\"\/><\/p>\n<p>  <b>\u0417\u0430\u0434\u0430\u0447\u0430:<\/b><br \/>   \u2014 \u0435\u0441\u0442\u044c REST-\u0441\u0435\u0440\u0432\u0435\u0440<br \/>   \u2014 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (HTML\/CSS\/Javascript) \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0435\u0440\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 XMLHttpRequest<br \/>   \u2014 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0444\u0438\u0447\u0443<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-166539","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/166539","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=166539"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/166539\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=166539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=166539"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=166539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}