#javascript #google-chrome
#javascript #google-chrome
Вопрос:
Мне просто любопытно, почему в этом выводе Chrome debugger здесь присутствует шестнадцатеричное число, связанное с каждым источником …
WebSocket is already in CLOSING or CLOSED state.
(anonymous) @ websocket.js?13d9:192
exports.encodePacket @ browser.js?9636:123
(anonymous) @ websocket.js?13d9:170
WS.write @ websocket.js?13d9:202
Transport.send @ transport.js?87a5:110
Socket.flush @ socket.js?1006:565
Socket.sendPacket @ socket.js?1006:625
Socket.ping @ socket.js?1006:529
(anonymous) @ socket.js?1006:516
setTimeout (async)
Socket.setPing @ socket.js?1006:514
Socket.onPacket @ socket.js?1006:445
(anonymous) @ socket.js?1006:273
Emitter.emit @ index.js?ea2f:133
Transport.onPacket @ transport.js?87a5:145
Transport.onData @ transport.js?87a5:137
ws.onmessage @ websocket.js?13d9:147
Например, исходный код websocket.js
соотносится с 13d9
.
Откуда берется это шестнадцатеричное значение и для чего оно используется?
Меня не интересует фактическая ошибка в этом случае, я просто использую ее для примера.
Комментарии:
1. Может ли это быть частью URL скрипта? Какой-то хэш, уничтожающий кэш? У вас есть пример веб-страницы (или минимального кода), запускающей такие сообщения?
Ответ №1:
Это часть URL вашего файла.
Не могу точно сказать, что устанавливает его в этом случае, но это распространенный способ избежать кэширования при обновлении файла js.
Вывод на консоль Chrome не отображает номер столбца, поэтому после :
у вас есть номер строки.
const script = document.createElement('script');
const blob = new Blob([`const foo = "bar";
// should throw at line 3
throw new TypeError('not a baz');`], {type: "application/javacript"});
script.src = URL.createObjectURL(blob);
document.head.appendChild(script);
Приводит к
Uncaught TypeError: not a baz blob:null/96273a46-9...a3b1-12d1f1f3355c:3
at 96273a46-9f81-4eed-a3b1-12d1f1f3355c:3
Как вы можете видеть, здесь показан только номер строки, хотя в Error.stack
сообщении указан номер столбца в форме script_url:lineno:colno
const script = document.createElement('script');
const blob = new Blob([`console.log(new Error('foo').stack);`], {type: "application/javacript"});
script.src = URL.createObjectURL(blob);
document.head.appendChild(script);
/*
Error: foo
at blob:null/[random-blob-url]:1:13
*/