Cryptic " Błąd Skryptu."zgłoszone w Javascript w Chrome i Firefox

Mam skrypt, który wykrywa błędy Javascript na mojej stronie internetowej i wysyła je do mojego zaplecza do zgłaszania. Zgłasza pierwszy napotkany błąd, przypuszczalny numer linii i czas.

Edytuj, aby dołączyć 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>

Z powodu tego skryptu, jestem w pełni świadomy wszelkich błędów javascript, które dzieją się na mojej stronie. jednym z największych przestępców jest " błąd skryptu."on line 0.W Chrome 10+ i Firefox 3+. Ten błąd nie istnieje (lub może być nazywany czymś innym?) w Internet Explorerze.

Korekta (23.05.2013): Ten błąd "script Error, Line 0" pojawia się teraz w IE7 i ewentualnie innych wersjach IE. Prawdopodobnie jest to wynik niedawnej poprawki bezpieczeństwa IE, ponieważ takie zachowanie wcześniej nie istniało.

Czy ktoś ma pojęcie, co oznacza ten błąd lub co go powoduje? Dzieje się to na około 0.25% moich ogólnych obciążeń stron i stanowi połowę zgłoszonych błędów.

Author: Elliot B., 2011-05-06

12 answers

"błąd skryptu."dzieje się w przeglądarce Firefox, Safari i Chrome, gdy wyjątek narusza zasady przeglądarki same-origin - tzn. gdy błąd występuje w skrypcie hostowanym w domenie innej niż domena bieżącej strony.

To zachowanie jest zamierzone, aby zapobiec wyciekaniu informacji przez skrypty do zewnętrznych domen. Na przykład, dlaczego jest to konieczne, wyobraź sobie przypadkowe odwiedzenie evilsite.com, które serwuje stronę z <script src="yourbank.com/index.html">. (tak, wskazujemy ten skrypt tag w html, nie JS). Spowoduje to błąd skryptu, ale błąd jest interesujący, ponieważ może nam powiedzieć, czy jesteś zalogowany, czy nie. Jeśli jesteś zalogowany, błąd może być 'Welcome Fred...' is undefined, Podczas Gdy jeśli nie jesteś, może to być 'Please Login ...' is undefined. Coś w tym stylu.

Jeśli evilsite.com jeśli chodzi o najlepsze instytucje bankowe 20, mają one całkiem dobry pomysł na to, które witryny bankowe odwiedzasz i mogą zapewnić znacznie bardziej ukierunkowaną stronę phishingową. (To oczywiście tylko jeden przykład. Ale ilustruje to, dlaczego przeglądarki nie powinny zezwalać żadnym danym na przekraczanie granic domen.)

Testowałem to w najnowszych wersjach Safari, Chrome i Firefox - Wszystkie to robią. IE9 nie-traktuje wyjątki x-origin tak samo jak te same-origin. (A Opera nie obsługuje onerror.)

From the horses mouth: WebKit source that checks origin when passing exceptions to onerror (). I źródło Firefoksa, które sprawdza .

Aktualizacja (10/21/11) : błąd Firefoksa, który śledzi ten problem zawiera link do posta na blogu, który zainspirował to zachowanie.

UPDATE (12/2/14) : możesz teraz włączyć pełne raportowanie błędów między domenami w niektórych przeglądarkach, określając crossorigin atrybut na znacznikach skryptu i polecenie serwera wysyłającego odpowiednie CORS nagłówki odpowiedzi HTTP.

 235
Author: broofa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-22 10:02:52

Aktualizacja dla tych, którzy natkną się na to pytanie w przyszłości : broofa ma rację z odpowiedzią i nie ma na to obejścia.

Oczywiście inne natknęły się na to ograniczenie i niektóre błędy z prośbą o poprawkę zostały złożone dla Firefoksa: błąd 69301 i dla WebKit: błąd 70574

Dobra wiadomość jest taka, że błąd został rozwiązany w Firefoksie wraz z wydaniem Firefoksa 13. Tak się go używa:

<script src="http://somremotesite.example/script.js" crossorigin>

crossorigin jest równoważne aby crossorigin=anonymous i mówi przeglądarce, aby wykonała pobieranie CORS skryptu bez wysyłania poświadczeń.

Należy upewnić się, że skrypt jest wysyłany z Access-Control-Allow-Origin wartością nagłówka HTTP, która pasuje do domeny żądającej, np.

Access-Control-Allow-Origin: http://myhomesite.example
Access-Control-Allow-Origin: *

W Przeciwnym Razie przeglądarka anuluje Ładowanie skryptu .

Dla Apache:

Header set Access-Control-Allow-Origin "*"

(i zobacz przykłady CORS dla Inne Serwery WWW .)

Jeśli wysyłasz skrypty w PHP:

header('Access-Control-Allow-Origin', 'http://myhomesite.example');

Przetestowałem to i działa zgodnie z oczekiwaniami. wszystkie błędy ze skryptu.js zostanie przechwycony przez funkcję obsługi window.onerror ze szczegółami wiadomości, pliku i linii.

Błąd WebKit nie został jeszcze naprawiony, ale zaproponowano łatkę (i używa tego samego rozwiązania). Mam nadzieję, że poprawka zostanie wydana wkrótce.

Więcej informacji o Kors tutaj: http://enable-cors.org/

 47
Author: adig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-12 20:46:26

To zajęło sporo czasu, żeby to rozgryźć.

Zrobiliśmy kilka rzeczy, aby spróbować go rozwiązać, w tym robi rzeczy takie jak wyrzucanie całego ciała dokumentu z powrotem do naszych serwerów za pośrednictwem Ajax, aby spróbować to rozwiązać.

Nadal nie jestem pewien, co powoduje " błąd skryptu."(z okresem BTW, tak to się pojawia w naszym Loggerze Ajax) w Firefoksie, ale w Chrome udało nam się zawęzić go do...

Werble...

Funkcja automatycznego tłumaczenia Google Chrome.

Wiele osób mówiących po angielsku prawdopodobnie nawet nie wie o tej funkcji, ale aby ją przetestować, myślę, że odwiedź nie-angielską Stronę za pomocą Chrome. Albo jeszcze lepiej, jeśli przekopujesz się przez Opcje Chrome, jest miejsce, aby zmienić język przeglądarki. Zmień ją na inną niż angielska, uruchom ponownie przeglądarkę i odwiedź angielską stronę.

Powinieneś dostać pasek na górze z pytaniem, czy chcesz, aby Chrome przetłumaczył stronę dla Ciebie.

W naszym przypadku tak czy inaczej, Tłumacz był powoduje to problem, ponieważ wstrzykuje znacznik skryptu do ciała dokumentu i (zgadywanie tutaj) używa pewnego rodzaju systemu opartego na JS, aby wysłać zawartość do serwerów Google i zmusić ich do tłumaczenia.

Mimo, że błąd w konsoli był czymś niezrealizowanym, wiadomość, która była wysyłana do window.onerror to " błąd skryptu.".

W każdym razie, jest lekarstwo.

Http://googlewebmastercentral.blogspot.com/2007/12/answering-more-popular-picks-meta-tags.html

<meta name="google" content="notranslate"/>

To zrobi 2 rzeczy (o ile wiemy, może więcej?):

A) Wyłącz Pasek tłumaczenia z wyskakującego w Chrome.

B) Wyłącz tłumaczenie strony poprzez translate.google.com.

W naszej sytuacji tak czy inaczej, to rozwiązało mnóstwo tych "błędów skryptu."problemy, których doświadczaliśmy.

Przepraszam za błędy ortograficzne w tym post, nadal jestem na trybie nie-angielskim w Chrome pisząc to, a Sprawdzanie pisowni nie jest ustawione na angielski ;) Czas przełączyć z powrotem.

Smacznego!
 23
Author: anonymous-one,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-08 21:04:53

Ze względu na niski %, można założyć, że nie są normalnymi użytkownikami. Prawdopodobnie użytkownicy z userscripts, bookmarklets lub nawet może po prostu bałagan z konsoli na swojej stronie internetowej. Posiadanie całego HTML strony, na której to się dzieje, może pomóc w przetestowaniu tej teorii. Jak również kompletny błąd. Powinien dać ci adres url, czy zawsze jest taki sam? Czy linia jest naprawdę 0 czy tylko niezdefiniowana?

Nie sądzę, aby ustawianie wartości domyślnych w onerror było dobrym pomysłem, a 0 prawdopodobnie pochodzi z parseInt(ln || 0), gdy błąd nie jest tak naprawdę na stronie (patrz przykłady powyżej).

Dodanie if, aby sprawdzić, czy linia jest znana albo w JavaScript, aby zignorować te błędy (ponieważ prawdopodobnie nie pochodzą z twojego własnego kodu) lub w kodzie po stronie serwera, aby zająć się nimi osobno, imo, byłoby lepsze.

=== EDIT === Got to: http://www.xavierm02.net/AZE / Zainstaluj użytkownika.plik js (zrobiłem to na Chrome, ale na Firefoksie też powinien działać). Następnie otwórz stronę html w tej samej przeglądarce. Pokaże masz błąd (zmieniłem tylko, że zamiast raportowania na serwer, zapisuje go na stronie). Z 0 jako numerem linii.

 11
Author: xavierm02,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-11 07:19:45

Miałem podobny problem: moje skrypty są obsługiwane przez subdomenę i podlegają tym samym ograniczeniom pochodzenia. Jednak rozwiązałem to przez:

1) dodanie każdego znacznika skryptu w ten sposób:

<script type="text/javascript" src="http://subdomain.mydomain.tld" crossorigin="*.mydomain.tld" />

2) modyfikacja protokołu httpd apache.conf poprzez dodanie następującej treści wewnątrz każdego vhost ' a (musisz enbable mod_headers):

<IfModule mod_headers.c>
Header add Access-Control-Allow-Origin "*.mydomain.tld"
</IfModule>
Mam nadzieję, że to pomoże ...

EDIT

Na jednym z moich serwerów nie byłem w stanie zrobić tego funkcjonalnego z wyjątkiem zastępowanie

*.mydomain.tld

By

*

Bądź świadomy wad potencjalnie pozwalających * na phishowanie rozszerzonych informacji. Dokumentacja CORS, same-origin, img & fonts, cdn jest dostępna, ale bardzo mniej o script tag crossorigin szczegóły są dostępne.

 3
Author: spoutnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-11 15:51:25

W Chrome dostaję również "błąd skryptu" (w linii 0) podczas ładowania zarówno HTML, jak i Javascript z file:// . W Firefoksie tak się nie dzieje. Prawdopodobnie nadgorliwa Ochrona tego samego pochodzenia chromu.

Wszystko jest dobre podczas ładowania tego samego HTML i Javascript przez HTTP.

 1
Author: Myrne Stol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-23 23:23:40

Jak o poniżej. Błąd skryptu nie jest dostępny za pomocą JavaScript, więc po prostu Wyizoluj ten konkretny przypadek i obsłuż go najlepiej, jak potrafisz.

window.onerror = function (msg, url, lineNo, columnNo, error) {
    var string = msg.toLowerCase();
    var substring = "script error";
    if (string.indexOf(substring) > -1){
        alert('Script Error: See Browser Console for Detail');
    } else {
        alert(msg, url, lineNo, columnNo, error);
    }
  return false;
};
 1
Author: Ron Royston,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-31 19:20:28

Powiem ci co mi naprawiło na Safari (WebKit): Jeśli umieszczę procedurę wywołania zwrotnego JS faktycznie na stronie, wtedy uzyskam pełne informacje. Jeśli włączę to do .plik js przez znacznik, po prostu dostaję błąd" script error " (bez numeru linenumber, itp.).

Może to ma związek z tym, co powiedział Broofa.

Anwyay, więc teraz mam mały callback na stronie, a potem resztę pliku poza stroną.

 0
Author: kbern,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 21:36:37
 0
Author: Premchandra Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-08 09:34:48

Trochę przeszukałem i wydaje się, że "błąd skryptu" oznacza, że miał problemy z załadowaniem pliku, którego szukano. Może to być problem z buforowaniem po stronie klienta lub może to być problem z serwerem z powodu przeciążenia.

Jest to najprawdopodobniej spowodowane czymś takim, gdzie sam skrypt jest plikiem, którego nie może załadować, stąd błąd występujący w linii 0.

<script type="text/javascript" src="somescript.js"></script>
 -2
Author: Nick Brunt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-06 16:19:14

Doświadczyłem

Błąd Skryptu. linia 0

Błędy przez pewien czas były zgłaszane z powrotem do naszego serwera, gdy błąd wystąpił w przeglądarkach klientów. Wczoraj po raz pierwszy (po wprowadzeniu "use strict"; w naszym javascript) udało mi się odtworzyć ten problem w Safari i Chrome na Windows 7. Po zaśmieceniu naszego kodu instrukcjami alert() wyśledziłem ten błąd do użycia niezdefiniowanej zmiennej! np. xx = 123; Gdzie xx {[7] } nie jest zdefiniowane przez var oświadczenie.

Safari zgłosiło to jako

ReferenceError: Strict mode zabrania dorozumianego tworzenia globalnej właściwości ' xx '

Wewnątrz Web Inspector, ale window.funkcja OnError wykrywała

Błąd Skryptu. linia 0

 -3
Author: Wandering Zombie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-11 12:13:02

Przeglądanie kodu źródłowego Firefoksa ujawnia, że nie ma "Script Error.". W związku z tym jest bardzo prawdopodobne, że jakiś skrypt na twojej stronie rzuca niewybredny błąd w ten sposób:

throw new Error('Script Error.');

Prawdopodobnie to stwierdzenie jest osiągane tylko w Firefoksie i Chrome.

Nie wiem, dlaczego nie ma numeru linii. Może jakiś eval() problem?
 -9
Author: user123444555621,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-10 21:59:03