{"id":12539,"date":"2021-01-24T17:55:05","date_gmt":"2021-01-24T11:55:05","guid":{"rendered":"https:\/\/shra.ru\/?p=12539"},"modified":"2021-01-24T17:55:07","modified_gmt":"2021-01-24T11:55:07","slug":"perekhvat-oshibok-na-front-end-s-pomoshhyu-js","status":"publish","type":"post","link":"https:\/\/shra.ru\/2021\/01\/perekhvat-oshibok-na-front-end-s-pomoshhyu-js\/","title":{"rendered":"\u041f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 front-end \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e js"},"content":{"rendered":"\n
\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043b\u043e\u0433\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0438\u043d\u043e\u0432\u0430\u0442\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432. <\/p>\n\n\n\n\n\n\n\n
\u041e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043b\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c, \u0442.\u043a. \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0435\u0434\u0432\u0430 \u043b\u0438 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u043d\u0435\u0439, \u0430 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0432\u044b \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442\u0435. <\/p>\n\n\n\n
\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432 js \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 window <\/em>\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0435 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n\n\n\n \u041f\u0443\u0441\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443: \/front-end\/logger. \u041e\u043d \u0447\u0438\u0442\u0430\u0435\u0442 GET \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0433\u0434\u0435 \u0442\u043e \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442. \u0410 \u043f\u043e\u043a\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 front-end:<\/p>\n\n\n\n \u0421\u043a\u0440\u0438\u043f\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n\n\n\n \u0415\u0441\u043b\u0438 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c http \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0432\u044b \u043d\u0430\u0439\u0434\u0435\u0442\u0435 \u0435\u0451 \u0438 \u0432 \u043b\u043e\u0433\u0430\u0445 \u043d\u0430 \u0432\u0435\u0431-\u0441\u0435\u0440\u0432\u0435\u0440\u0435 (\u043b\u0438\u0431\u043e \u0432 \u043b\u043e\u0433\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u043e\u043a\u0441\u0438 \u0438\u043b\u0438 \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432). \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u043c\u0435\u0441\u0442\u043e http \u043a\u043e\u0434\u0430 \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 ‘FETCH ERROR’, \u0442\u043e \u0444\u0430\u0439\u043b \u0431\u044b\u043b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n\n\n\n \u041e\u0448\u0438\u0431\u043a\u0438 \u0442\u0438\u043f\u0430 LINK — \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 CSS\/JS \u0444\u0430\u0439\u043b\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u0430\u0439\u0442\u0430, \u0438\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435.<\/p>\n\n\n\n \u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u043d\u0430 back-end, \u0432\u0430\u043c \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 \u0442\u0440\u0443\u0434\u0430 \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0447\u0430\u0441\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f. \u041d\u043e \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f cms drupal 7, \u0438 \u044f \u0438\u043c \u0437\u0434\u0435\u0441\u044c \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c.<\/p>\n\n\n\n \u041e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442 end-point \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f — \u0437\u0430\u043f\u0438\u0441\u044c \u043b\u043e\u0433\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043b\u043e\u0433 cms.<\/p>\n\n\n\n \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u043b\u043e\u0433\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435. \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0438\u043d\u043e\u0432\u0430\u0442\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0435\u0442\u0438, \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[61],"tags":[],"class_list":["post-12539","post","type-post","status-publish","format-standard","hentry","category-javascript"],"acf":[],"yoast_head":"\ntry {\r\n \/\/ \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\n function pinger(data) {\r\n let img = new Image();\r\n img.src = \"\/front-end\/logger\" + encodeQueryData(data);\r\n }\r\n \/\/ \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\n function encodeQueryData(data) {\r\n const ret = [];\r\n for (let d in data)\r\n ret.push(encodeURIComponent(d) + '=' + encodeURIComponent(data[d]));\r\n return ret.length ? '?' + ret.join('&') : '';\r\n }\r\n\n \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u044f ERROR\r\n window.addEventListener('error', (e) => {\r\n\r\n let tagName = e.srcElement.tagName;\r\n\r\n let data = { \r\n type: tagName,\r\n page: window.location.href,\r\n userAgent: navigator.userAgent,\r\n platform: navigator.platform,\r\n };\r\n\r\n \/\/ \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0439 URL\n if (tagName == 'LINK') {\r\n data.url = e.srcElement.href; \r\n }\r\n if (tagName == 'IMG') {\r\n data.url = e.srcElement.src;\r\n }\n\n if (data.url !== undefined) {\r\n \/\/ \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u044b\u044f\u0432\u0438\u0442\u044c http \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\n\r fetch(data.url).then(function(response) {\r\n data.status = response.status;\r\n data.statusText = response.statusText;\r\n pinger(data);\r\n }).catch((error) => {\r\n data.status = 'FETCH ERROR';\r\n data.statusText = error;\r\n pinger(data);\r\n });\r\n\r\n }\r\n }, true);\r\n\r\n} catch (e) {\r\n ;\r\n}\r\n<\/code><\/pre>\n\n\n\n
[\n \/\/ \u0442\u0438\u043f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 \u0438\u043b\u0438 \u0442\u0435\u0433 (LINK \/ IMG)\n type,\n \/\/ url, \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430\n page: \n \/\/ \u0438\u043c\u044f \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (\u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 navigator)\n userAgent,\n \/\/ \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, win32)\n platform,\r\n \/\/ url \u0444\u0430\u0439\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\n url,\n \/\/ http \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438\u043b\u0438 'FETCH ERROR'\n status,\n \/\/ \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \n statusText\n]<\/code><\/pre>\n\n\n\n
Back-end \u0447\u0430\u0441\u0442\u044c logger-\u0430 \u0434\u043b\u044f Drupal<\/h2>\n\n\n\n
\/**\r\n * Implementation hook user login.\r\n *\/\r\nfunction MYMODULE_menu() {\r\n $items = array();\r\n\r\n $items['front-end\/logger'] = array(\r\n 'page callback' => '_mymodule_log_error',\r\n 'access arguments' => array('access content'),\r\n 'type' => MENU_CALLBACK,\r\n ); \r\n\r\n return $items;\r\n}\n\n\/**\r\n * Callback endpoint front-end\/logger\n *\/\r\nfunction _mymodule_log_error() {\r\n\r\n $inputVars = ['type', 'page', 'url', 'userAgent', 'platform', 'status', 'statusText'];\r\n $data = [];\r\n foreach ($inputVars as $varName) {\r\n $data[$varName] = empty($_GET[$varName]) ? '' : $_GET[$varName];\r\n }\r\n\r\n if (in_array($data['type'], ['IMG', 'LINK'])) {\r\n $message = \"Error on {$data['page']}, {$data['status']}: {$data['statusText']}, file: {$data['url']}. {$data['platform']}. {$data['userAgent']}. \";\r\n watchdog('FRONTEND', $message, NULL, WATCHDOG_ALERT, $data['page']);\r\n }\r\n exit;\r\n}<\/code><\/pre>\n\n\n","protected":false},"excerpt":{"rendered":"