У меня есть скрипт, который обнаруживает ошибки Javascript на моем веб-сайте и отправляет их в бэкэнд для отчетов. Он сообщает о первой обнаруженной ошибке, предполагаемом номере строки и времени.
РЕДАКТИРОВАТЬ, чтобы включить doctype:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" xmlns:fb="http://www.facebook.com/2008/fbml">
...
<script type="text/javascript">
//<![CDATA[
// for debugging javascript!
(function(window){
window.onerror = function(msg, url, ln) {
//transform errors
if (typeof(msg) === 'object' && msg.srcElement && msg.target) {
if(msg.srcElement == '[object HTMLScriptElement]' && msg.target == '[object HTMLScriptElement]'){
msg = 'Error loading script';
}else{
msg = 'Event Error - target:' + msg.target + ' srcElement:' + msg.srcElement;
}
}
msg = msg.toString();
//ignore errors
if(msg.indexOf("Location.toString") > -1){
return;
}
if(msg.indexOf("Error loading script") > -1){
return;
}
//report errors
window.onerror = function(){};
(new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url || document.location.toString().replace(/#.*$/, "")) + "&ln=" + parseInt(ln || 0) + "&r=" + (+new Date());
};
})(window);
//]]>
</script>
Из-за этого скрипта я хорошо осведомлен о любых ошибках JavaScript, которые происходят на моем сайте. Один из крупнейших нарушителей - «Ошибка сценария». в строке 0. в Chrome 10+ и Firefox 3+. Эта ошибка не существует (или может называться как-то еще?) В Internet Explorer.
Исправление (23.05.2013): эта ошибка «Ошибка сценария, строка 0» теперь отображается в IE7 и, возможно, в других версиях IE. Возможно, это результат недавнего исправления безопасности IE, так как ранее такого поведения не было.
Кто-нибудь знает, что означает эта ошибка или что ее вызывает? Это происходит примерно на 0,25% моих общих загрузок страниц и составляет половину зарегистрированных ошибок.
источник
application/xhtml+xml
для запуска его в XHTML-парсере (как сказано в спецификации XHTML). Существует много контента, который претендует на XHTML, но отправляет обычный HTML-тип документа. Из-за того, что создатели контента неправильно используют XHTML, браузеры решили использовать только парсер XMLapplication/xhtml+xml
(это действительно строгий парсер). В hixie.ch/advocacy/xhtml и webdevout.net/articles/beware-of-xhtml говорится, почему бы не использовать анализатор HTML с XHTML.Ответы:
«Ошибка сценария». происходит в Firefox, Safari и Chrome, когда исключение нарушает политику браузера с тем же происхождением, т. е. когда ошибка возникает в сценарии, размещенном в домене, отличном от домена текущей страницы.
Такое поведение является преднамеренным, чтобы предотвратить утечку информации скриптами во внешние домены. Для примера того, почему это необходимо, представьте себе случайное посещение
evilsite.com
, которое отображает страницу<script src="yourbank.com/index.html">
. (да, мы указываем этот тег сценария на HTML, а не на JS). Это приведет к ошибке скрипта, но эта ошибка интересна тем, что может сообщить нам, вошли вы в систему или нет. Если вы вошли в систему, ошибка может быть'Welcome Fred...' is undefined
, а если нет, то это может быть'Please Login ...' is undefined
. Что-то в этом роде.Если evilsite.com сделает это для 20 или около того банковских учреждений, у них будет довольно хорошее представление о том, какие банковские сайты вы посещаете, и они могут предоставить гораздо более целевую фишинговую страницу. (Конечно, это только один пример. Но он иллюстрирует, почему браузеры не должны позволять каким-либо данным пересекать границы домена.)
Я проверял это в последних версиях Safari, Chrome и Firefox - все они делают это. IE9 этого не делает - он обрабатывает исключения x-origin так же, как исключения того же происхождения. (И Опера не поддерживает ошибку.)
Из уст лошадей: источник WebKit, который проверяет происхождение при передаче исключений в onerror (). И источник Firefox, который проверяет .
ОБНОВЛЕНИЕ (21.10.11) : ошибка Firefox, которая отслеживает эту проблему, включает ссылку на пост в блоге, который вдохновил это поведение.
ОБНОВЛЕНИЕ (12/2/14) : теперь вы можете включить полный междоменный отчет об ошибках в некоторых браузерах, указав
crossorigin
атрибут в тегах сценария и сделав так, чтобы сервер отправлял соответствующие заголовки HTTP-ответов CORS .источник
Script Error.
также происходит, если пользователь установил расширение Safari (вероятно, то же самое для плагинов Firefox), которое внедряет код JavaScript с ошибкамиОбновление для тех, кто столкнется с этим вопросом в будущем: брофа прав с ответом, и для этого нет обходного пути.
Очевидно, что другие столкнулись с этим ограничением, и некоторые ошибки, запрашивающие исправление, были поданы для Firefox: Ошибка 69301 и для WebKit: Ошибка 70574
Хорошей новостью является то, что ошибка была исправлена для Firefox с выпуском Firefox 13. Вот как вы его используете:
crossorigin
эквивалентноcrossorigin=anonymous
и говорит браузеру выполнить выборку сценария CORS без отправки учетных данных.Вы должны убедиться, что скрипт отправлен со
Access-Control-Allow-Origin
значением заголовка HTTP, которое соответствует запрашивающему домену, например,в противном случае браузер отменит загрузку скрипта .
Для Apache:
(И посмотрите примеры CORS для других веб-серверов .)
Если вы отправляете скрипты на PHP:
Я проверил это, и он работает как ожидалось. все ошибки из
window.onerror
файла script.js будут перехвачены обработчиком с подробным сообщением, файлом и строкой.Ошибка WebKit еще не исправлена, но был предложен патч (и использует то же решение). Надеюсь, исправление будет выпущено в ближайшее время.
Больше информации о CORS здесь: http://enable-cors.org/
источник
Этому потребовалось немало времени, чтобы понять.
Мы сделали кучу вещей, чтобы попытаться решить их, включая такие вещи, как выгрузка всего тела документа обратно на наши серверы через Ajax, чтобы попытаться выяснить это.
Я все еще не уверен, что вызывает «Ошибка скрипта». (с периодом между прочим, вот как это проявляется в нашем Ajax-логгере) в Firefox, но в Chrome мы смогли сузить его до ...
Барабанная дробь...
Функция автоматического перевода Google Chrome.
Многие англоговорящие люди, вероятно, даже не знают об этой функции, но для ее тестирования, я думаю, посетите неанглоязычный сайт с помощью Chrome. Или, что еще лучше, если вы поковыряетесь в настройках Chrome, есть место для изменения языка браузера. Измените его на что-нибудь неанглийское, перезапустите браузер и посетите сайт на английском языке.
Вы должны получить панель вверху, спрашивая, хотите ли вы, чтобы Chrome перевел страницу для вас.
В любом случае, в нашем случае переводчик вызывал проблему, так как он вставляет тег сценария в тело документа и (догадываясь здесь) использует какую-то систему на основе JS для отправки контента на серверы Google и получения его для его перевода.
Несмотря на то, что ошибка в консоли была чем-то не связанным, сообщение, которое отправлялось в window.onerror, было «Ошибка сценария».
В любом случае, есть лекарство.
http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html
Это сделает 2 вещи (насколько мы знаем, может быть, больше?):
a) Отключите переводчик, чтобы он появлялся в Chrome.
б) Отключить перевод страницы через translate.google.com.
В любом случае, в нашей ситуации это решило тонну этих «ошибок сценария». проблемы, которые мы испытывали.
Извините за орфографические ошибки в этом посте, я все еще нахожусь на неанглийском режиме в Chrome, пишущем это, и проверка орфографии не установлена на английский;) Время переключиться назад.
Наслаждайтесь!
источник
onerror
(по крайней мере, в Firefox) просто говорит «Ошибка скрипта » в таком случае.Из-за низкого% вы можете предположить, что они не обычные пользователи. Возможно, пользователи с пользовательскими скриптами, букмарклетами или даже просто возятся с консолью на вашем сайте. Наличие всего HTML страницы, где это происходит, может помочь проверить эту теорию. Как и полная ошибка. Это должно дать вам URL, это всегда то же самое? Строка действительно 0 или просто не определена?
Я не думаю, что установка значений по умолчанию в вашем onerror - это хорошая идея, и 0, вероятно, появляется,
parseInt(ln || 0)
когда ошибки на самом деле нет на странице (см. Примеры выше).Добавление if, чтобы увидеть, известна ли строка либо в JavaScript, чтобы игнорировать эти ошибки (потому что они, вероятно, не исходят из вашего собственного кода), либо в коде на стороне сервера, чтобы позаботиться о них отдельно, было бы, imo, лучше ,
=== РЕДАКТИРОВАТЬ === Получил: http://www.xavierm02.net/AZE/ Установите файл user.js (я сделал это на Chrome, но он должен работать и на Firefox). Затем откройте HTML-страницу в том же браузере. Он покажет вам ошибку (я только изменил этот отчет о сообщении на сервер, он пишет это на странице). С 0 в качестве номера строки.
источник
(new Image()).src = "/jserror.php?msg=" + encodeURIComponent(msg) + "&url=" + encodeURIComponent(url) + "&ln=" + parseInt(ln) + "&r=" + (+new Date());
и вы, вероятно, не увидите URL (потому что это расширение или что-то локальное, поэтому браузер не показывает вам) и номер строки.У меня была похожая проблема: мои сценарии обслуживаются поддоменом и подпадают под то же ограничение происхождения. Однако я решил это следующим образом:
1) добавление каждого тега скрипта следующим образом:
2) изменить apache httpd.conf, добавив в каждый vhost следующее (вы должны включить mod_headers):
Надеюсь это поможет ...
РЕДАКТИРОВАТЬ
На одном из моих серверов я не смог сделать этот функционал, кроме как заменив
по
Помните о недостатках, которые могут позволить * фишировать расширенную информацию. Доступна документация по CORS, одинакового происхождения, img & fonts, cdn, но доступно очень мало подробностей о происхождении тега скрипта.
источник
В Chrome я также получаю «Ошибка скрипта» (в строке 0) при загрузке как HTML, так и Javascript из
file://
. Этого не происходит в Firefox. Вероятно, чрезмерно усердная защита Chrome того же происхождения.Все хорошо при загрузке того же HTML и Javascript через HTTP.
источник
Как насчет ниже. Ошибка сценария недоступна через JavaScript, поэтому просто выделите этот конкретный случай и обработайте его как можно лучше.
источник
Хорошая статья, которая, наконец, указывает на эту тему. https://danlimerick.wordpress.com/2014/01/18/how-to-catch-javascript-errors-with-window-onerror-even-on-chrome-and-firefox/
источник
И Chrome, и Firefox на iOS основаны на веб-представлении Safari, но вставляют несколько пользовательских сценариев в каждую загруженную страницу. Если в каком-либо из этих сценариев что-то идет не так, о нем также сообщается
Script error on line 0
. (Скрипты, вставленные в браузер, также считаются перекрестными источниками)Как я обнаружил и задокументировал в этом другом SO-потоке, у Chrome и Firefox на iOS есть проблемы в своих пользовательских скриптах, корректно обрабатывающих элементы SVG. Итак, в дополнение ко всем остальным ответам в этой теме: если вы используете SVG-элементы и
<a>
теги внутри<svg>
тегов на своей странице, это приведет кScript errors
тому , что о них будет сообщено в iOS Chrome и iOS Firefox.источник
Я расскажу вам, что это исправило для меня в Safari (WebKit): если я на самом деле помещу процедуру обратного вызова JS на страницу , то получу полную информацию. Если я включаю его в файл .js через тег, я просто получаю сообщение об ошибке «Ошибка скрипта» (без номера белья и т. Д.).
Может быть, это связано с тем, что сказал Бруфа.
Итак, теперь у меня есть небольшой обратный вызов на странице, а затем остальная часть файла за пределами страницы.
источник
Я провел небольшой поиск, и кажется, что «Ошибка скрипта» означает, что у него возникли проблемы с загрузкой файла, который его попросили найти. Это может быть проблема с кэшированием на стороне клиента или проблема с сервером из-за перегрузки.
Скорее всего, это вызвано чем-то вроде этого, где сам скрипт - это файл, который он не может загрузить, поэтому ошибка в строке 0.
источник
script.onerror
не был уволен за отсутствующие скрипты в некоторых браузерах.Я испытал
Ошибка сценария. строка 0
сообщения об ошибках в течение некоторого времени возвращаются на наш сервер, когда ошибка возникла в клиентских браузерах. Вчера впервые (после представления
"use strict";
в нашем javascript) я смог повторить эту проблему в Safari и Chrome на Windows 7. После засорения нашего кода с помощью операторов alert () я отследил эту ошибку до использования неопределенной переменной! например,xx = 123;
где xx не определен сvar
оператором.Safari сообщил об этом как
ReferenceError: Строгий режим запрещает неявное создание глобального свойства 'xx'
в веб-инспекторе, но обнаруживалась функция window.onerror
Ошибка сценария. строка 0
источник
Grepping исходный код Firefox показывает, что нет
"Script Error."
. Таким образом, очень вероятно, что какой-то скрипт на вашем сайте выдает неперехваченную ошибку, подобную этой:Вероятно, это утверждение достигается только в Firefox и Chrome.
Не уверен, почему нет номера строки, хотя. Может быть, какая-то
eval()
проблема?источник