Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

517
506

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ใƒฆใƒผใ‚ถใฎใƒ–ใƒฉใ‚ฆใ‚ถใง่ตทใใŸ JavaScript ใฎใ‚จใƒฉใƒผใ‚’ๅŽ้›†ใ™ใ‚‹

Last updated at Posted at 2018-03-08

ใชใœใ‚จใƒฉใƒผใ‚’ๅŽ้›†ใ™ใ‚‹ใฎใ‹

  • ใƒใ‚ฐๆŽขใ—
    • ใƒใ‚ฐใ‚’่ฆ‹ใคใ‘ใฆๆฝฐใ—ใฆใ„ใใŸใ‚
  • ใƒฆใƒผใ‚ถใ‹ใ‚‰ใฎใƒใ‚ฐๅ ฑๅ‘Šใฎ่ฃœๅŠฉ
    • ใƒฆใƒผใ‚ถใซๅ ฑๅ‘Šใฎ่ฒ ๆ‹…ใ‚’ใ‹ใ‘ใชใ„ใŸใ‚

ใ‚จใƒฉใƒผใ‚’ๅ–ๅพ—ใ™ใ‚‹

ๅ–ๅพ—ใ‚ฟใ‚คใƒŸใƒณใ‚ฐ

  • window.onerror
  • Promise ใฎใ‚จใƒฉใƒผ
  • ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏๆฏŽใฎ็‰นๅฎšใฎใ‚ฟใ‚คใƒŸใƒณใ‚ฐ

window.onerror

window.onerror ใซใƒกใ‚ฝใƒƒใƒ‰ใ‚’็™ป้Œฒใ—ใฆใŠใใ“ใจใงใ‚จใƒฉใƒผ็™บ็”Ÿๆ™‚ใซใใฎใƒกใ‚ฝใƒƒใƒ‰ใŒๅ‘ผใฐใ‚Œใ‚‹ใ€‚try-catch ใงใƒใƒณใƒ‰ใƒชใƒณใ‚ฐใ—ใฆใ„ใชใ„ใ‚จใƒฉใƒผใŒๆตใ‚Œใฆใใ‚‹ใ€‚

window.onerror = (message, file, lineNo, colNo, error) => {
}

ๅคใ„ใƒ–ใƒฉใ‚ฆใ‚ถใงใฏ error ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใŒๅ–ๅพ—ใงใใชใ„ใฎใงๆณจๆ„ใ™ใ‚‹ใ“ใจใ€‚

Promise ใฎใ‚จใƒฉใƒผ

window.onerror ใงใฏ Promise ใŒ reject ใ•ใ‚ŒใŸ้š›ใฎใ‚จใƒฉใƒผใƒใƒณใƒ‰ใƒชใƒณใ‚ฐใ‚’่กŒใฃใฆใ„ใชใ„ใ‚จใƒฉใƒผใฏๆคœๅ‡บใงใใพใ›ใ‚“ใ€‚

ใคใพใ‚Šไปฅไธ‹ใฎใ‚ˆใ†ใชใ‚ณใƒผใƒ‰ใงใฏๅๅฟœใ—ใฆใใ‚Œใชใ„ใจใ„ใ†ใ“ใจใงใ™ใ€‚

window.onerror = (a,b,c,d,e) => {
  console.error('window.onerror', a,b,c,d,e);
};

const promise = new Promise(() => {
  throw new Error('error dayo~');
});
promise.then(() => {
  console.log('kurae!');
});

ใใ“ใง็™ปๅ ดใ™ใ‚‹ใฎใŒ unhandledrejection ใ‚คใƒ™ใƒณใƒˆใงใ™ใ€‚

window.addEventListener("unhandledrejection", function (event) {
  console.warn("WARNING: Unhandled promise rejection. Shame on you! Reason: "
               + event.reason);
});

2018/03/09 ็พๅœจไธป่ฆใƒ–ใƒฉใ‚ฆใ‚ถใงใฏ Chrome ใจ Safari ใฎใฟใ“ใฎใ‚คใƒ™ใƒณใƒˆใซๅฏพๅฟœใ—ใฆใ„ใพใ™ใ€‚

ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏๆฏŽใฎ็‰นๅฎšใฎใ‚ฟใ‚คใƒŸใƒณใ‚ฐ

ไฝฟ็”จใ—ใฆใ„ใ‚‹ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใซใ‚ˆใฃใฆใฏ window.onerror ใงใ‚จใƒฉใƒผใ‚’ๅ–ๅพ—ใงใใชใ„ๅ ดๅˆใŒใ‚ใ‚‹ใ€‚ไพ‹ใˆใฐ Angular ใงใฏ ErrorHandler ใจใ—ใฆๅฎŸ่ฃ…ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚
Sentry ใฎใ‚ตใ‚คใƒˆ ใ‚’่ฆ‹ใ‚‹ใจๅ„ใƒ•ใƒฌใƒผใƒ ใƒฏใƒผใ‚ฏใงใฎ้›ฐๅ›ฒๆฐ—ใŒๆŽดใ‚ใ‚‹ใ€‚

ๅ–ๅพ—ใ™ใ‚‹ๆƒ…ๅ ฑ

  • ใ‚นใ‚ฟใƒƒใ‚ฏใƒˆใƒฌใƒผใ‚น
  • UserAgent
  • URL
  • ็พ่ฑกใŒ่ตทใใŸใƒšใƒผใ‚ธ ID
    • URL ใ‚’ๅ‰ฒใ‚ŠๆŒฏใฃใฆใ„ใชใ„ๅ ดๅˆใจใ‹
  • ใƒฆใƒผใ‚ถๆƒ…ๅ ฑ
    • ็„กๅๅŒ–
  • ใใฎไป–ๆœ‰ใ‚‹ใจใƒใ‚ฐใฎ็‰นๅฎšใซไพฟๅˆฉใชใ‚‚ใฎใ‚’่ฆ‹ใคใ‘ใŸใ‚‰ๆ•™ใˆใฆใใ ใ•ใ„

stacktrace.js

window.onerror ใงๅ–ๅพ—ใ—ใŸใ‚จใƒฉใƒผๆƒ…ๅ ฑใ‚’ใใฎใพใพๆ–‡ๅญ—ๅˆ—ใง้€ใฃใฆใ‚‚ใ„ใ„ใ‘ใฉใƒฉใ‚คใƒ–ใƒฉใƒชใ‚’ไฝฟใ†ใจใ‚‚ใฃใจๆ‰ฑใ„ใ‚„ใ™ใ„ใ€‚
stacktrace.js ใ‚’ไฝฟใ†ใจ sourcemap ใ‚’่งฃ้‡ˆใ—ใฆใใ‚Œใ‚‹ใฎใงๅคงๅค‰ไพฟๅˆฉใ€‚
sourcemap ใƒ•ใ‚กใ‚คใƒซใ‚’้žๅ…ฌ้–‹ใซใ—ใฆใ„ใ‚‹ๅ ดๅˆใฏ Sentry ็ญ‰ใฎไป•็ต„ใฟใซไน—ใ‚‹ใ‹ stacktrace.js ไปฅๅค–ใ‚’ๆคœ่จŽใ™ใ‚‹ๅฟ…่ฆใ‚ใ‚Šใ€‚

ใ‚จใƒฉใƒผใ‚’ๅŽ้›†ใ™ใ‚‹

ๅŽ้›†ๅ…ˆใฎ้ธๅˆฅ

  • ใ‚จใƒฉใƒผๅŽ้›†็ณปใ‚ตใƒผใƒ“ใ‚น
    • ไธ€่ฆง
    • ๅคงๆŠต window.onerror ใงใชใๅ€‹ๅˆฅใฎไป•็ต„ใฟใŒ็”จๆ„ใ•ใ‚Œใฆใ„ใ‚‹
    • ๆ—ขใซไฝฟใฃใฆใ‚‹ใ‚ตใƒผใƒ“ใ‚นใŒใ‚ใ‚Œใฐใใ“ใซ JavaScript ใฎใ‚จใƒฉใƒผใ‚‚ๆŠ•ใ’ใคใ‘ใ‚‹ใจ่‰ฏใ•ใใ†
  • ่‡ชๅ‰ใ‚ตใƒผใƒ
    • Ajax ใงใ‚จใƒฉใƒผๅ†…ๅฎนใ‚’้€ใ‚Šใคใ‘ใ‚‹

่‡ชๅ‰ใ‚ตใƒผใƒใซๆŠ•ใ’ใ‚‹ใจใใฎๆณจๆ„็‚น

ๅˆฅใƒ‰ใƒกใ‚คใƒณใซใ‚ใ‚‹ JavaScript ใƒ•ใ‚กใ‚คใƒซใ‚’่ชญใฟ่พผใ‚“ใงใ„ใ‚‹ๅ ดๅˆ CORS ใ‚’็ช็ ดใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚‹ใ€‚
ใ•ใ‚‚ใชใ„ใจใ‚จใƒฉใƒผๅ†…ๅฎนใŒๅ…จใฆ Script error. ใซ็ฝฎใๆ›ใ‚ใฃใฆใ—ใพใ†ใ€‚ใจใฆใ‚‚ๆ‚ฒใ—ใ„ใ€‚

ๅฏพๅฟœใ—ใชใ„ใจใ„ใ‘ใชใ„ใฎใฏไปฅไธ‹ใฎ2ใคใ€‚

  • crossorigin ๅฑžๆ€ง
  • CORS ใƒ˜ใƒƒใƒ€

crossorigin ๅฑžๆ€ง

ใ‚นใ‚ฏใƒชใƒ—ใƒˆใ‚’่ชญใฟ่พผใ‚“ใงใ„ใ‚‹็ฎ‡ๆ‰€ใซ crossorigin="anonymous" ใ‚’ไป˜ไธŽใ™ใ‚‹ใ€‚

<script src="http://another-domain.com/app.js" crossorigin="anonymous"></script>

CORS ใƒ˜ใƒƒใƒ€

JavaScript ใƒ•ใ‚กใ‚คใƒซใ‚’ๆไพ›ใ™ใ‚‹ใ‚ตใƒผใƒใฎใƒฌใ‚นใƒใƒณใ‚นใซ Access-Control-Allow-Origin ใƒ˜ใƒƒใƒ€ใ‚’ไป˜ไธŽใ™ใ‚‹ใ€‚

517
506
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
g-gen
GoogleๆŠ€่ก“ใ‚’ไธญๅฟƒใซๅ–ใ‚Šๆ‰ฑใ†ๆŠ€่ก“่€…้›†ๅ›ฃ

Today's trending articles

t7u-ito

@t7u-ito

Pythonใฎๅ‹‰ๅผทใ‚’ๅง‹ใ‚ใŸใจใ“ใ‚ๆจ™ๆบ–ใƒฉใ‚คใƒ–ใƒฉใƒชใŒๅผทๅŠ›ใ™ใŽใฆ๏ผˆJavascriptๆฏ”่ผƒ๏ผ‰้ฉšใใพใ—ใŸใ€‚Pythonใ‹ใ‚‰ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅ‹‰ๅผทใ‚’ๅง‹ใ‚ใ‚‹ใจๅคš่จ€่ชžๅญฆ็ฟ’ใซ่‹ฆๅŠดใ™ใ‚‹ใฎใงใฏ็„กใ„ใงใ—ใ‚‡ใ†ใ‹๏ผŸ

Linked from these articles

Comments

No comments

Let's comment your feelings that are more than good

Being held Article posting campaign

517
506

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address