ReportingObserver API: рдПрдХ рдирдП рдкрд░рд┐рдкреНрд░реЗрдХреНрд╖реНрдп рд╕реЗ рд╡реЗрдм рдкреГрд╖реНрдареЛрдВ рдХреЗ рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░

рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣ ReportingObserver API рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдПрдХ рддрдВрддреНрд░ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреЗрдЬ рдХреЛрдб рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рддрд╛ рд╣реИред ReportingObserver рдЗрд╕ W3C рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред


рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


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

рд╕рд╛рдЗрдЯ рдЖрдЧрдВрддреБрдХ, рд╕рдВрднрд╡рддрдГ, рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рд╕рд╛рдЗрдЯ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддреА рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рджреЗрдЦрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рд╕рдВрджреЗрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [Intervention] рдпрд╛ [Deprecation] ред

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

рдпрд╣рд╛рдБ рдХреНрдпрд╛ ReportingObserver рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

 const observer = new ReportingObserver((reports, observer) => { for (const report of reports) {   console.log(report.type, report.url, report.body); } }, { buffered: true }); observer.observe(); 

рдЖрдЗрдП рдЗрд╕ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

ReportingObserver рдПрдкреАрдЖрдИ рд╕рдВрд░рдЪрдирд╛


рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдкреАрдЖрдИ рд╣реИрдВ рдЬреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, window.onerror ред рд╣рд╛рд▓рд╛рдБрдХрд┐, window.onerror рдкреГрд╖реНрда рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рд╕рдорд╕реНрдпрд╛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЯреВрд▓ рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрд╡рд╛рджреЛрдВ рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд╛рд░рдг рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд░рд╛рдиреА рд╕реБрд╡рд┐рдзрд╛ рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ window.onerror рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрд╛ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджреЗрдЧрд╛ред рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ рдХрд┐ ReportingObserver рдХрд╛рдо рдЖрдПрдЧрд╛ред

ReportingObserver API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрдм рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреГрд╖реНрда рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА ReportingObserver рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд▓реА рд╣реИред рдЕрдм рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдХреЙрд▓рдмреИрдХ рдкрд░ рдХреМрди рд╕рд╛ рдбреЗрдЯрд╛ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ:

 const observer = new ReportingObserver((reports, observer) => { for (const report of reports) {   // тЖТ report.id === 'XMLHttpRequestSynchronousInNonWorkerOutsideBeforeUnload'   // тЖТ report.type === 'deprecation'   // тЖТ report.url === 'https://reporting-observer-api-demo.glitch.me'   // тЖТ report.body.message === 'Synchronous XMLHttpRequest is deprecated...' } }}); observer.observe(); 

ReportingObserver рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп ReportingObserver рдЖрдк рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рдХреЗрд╡рд▓ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 const observer = new ReportingObserver((reports, observer) => { ... }, {types: ['deprecation']}); 

рдпрджрд┐, ReportingObserver рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдк buffered: true рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ buffered: true рдкреНрд░реЙрдкрд░реНрдЯреА, рдЗрд╕рд╕реЗ рдРрд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рдг рд╕реЗ рдкрд╣рд▓реЗ рдЙрддреНрдкрдиреНрди рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рджреЗрдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛:

 const observer = new ReportingObserver((reports, observer) => { ... }, {types: ['intervention'], buffered: true}); 

рдкреБрд░рд╛рдиреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдпрд╛ рдХреЛрдб рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рдЧрд░рд╛рдиреА рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 observer.disconnect(); 

ReportingObserver API рдЙрджрд╛рд╣рд░рдг


рдпрд╣рд╛рдБ ReportingObserver рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдпрд╣рд╛рдБ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рднреЗрдЬрдиреЗ рдХреЗ рд╕рдВрдЧрдарди рдХрд╛ рдЖрд░реЗрдЦ рд╣реИ:

 const report = new ReportingObserver((reports, observer) => {  for (const report of reports) {     const stringifiedReport = JSON.stringify(report.body);     //        sendReport(stringifiedReport); } }, { types: ['deprecation'], buffered: true }); 

рдкрд░рд┐рдгрд╛рдо


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

ReportingObserver рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ ReportingObserver API?

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


All Articles