Math.random () Javascript-Funktion * undefined * auf Chrome

or allem bin ich überzeugt, dass dies eine triviale Frage ist, aber ich kann nicht verstehen, warum dies geschieht, und ich konnte nirgendwo anders eine Antwort finden. Ich habe mein Problem mit wenig Erfolg gegoogelt, aber wenn ich etwas verpasst und nur Ihre Zeit verschwendet habe, weisen Sie mich bitte in die richtige Richtung und akzeptieren Sie meine bescheidenen Ausreden.

Das heißt, hier ist was passiert. Ich erstelle ein einfaches Skript, um ein Diagramm anzuzeigen, das von einem verteilten Algorithmus (Giraph) gezeichnet wurde, und arbeite unter Linux. Ich importiere alle Bibliotheken und insbesondere jQuery und alles funktioniert in Firefox (Version 36.0.1). Wenn Sie zu Chrome (Version 41.0.2272.89 (64-Bit)) wechseln, funktioniert die Seite nicht mehr. Bei der Untersuchung des Problems stellte ich fest, dass sich der Fehler innerhalb des @ befanjQuery.extend() -Funktion in die jQuery-Bibliothek in der folgenden Zeile:

expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),

In der Tat versucht, @ aufzurufMath.random() in die Browserkonsole führt zu:

> Math.random();
> Uncaught TypeError: Undefined is not a function

Während Sie die Konsole eingeben, wird die Variable "Math" automatisch vervollständigt, mit dem folgenden Ergebnis:

> Math
> function (){return "";}

Das passiert mit Chrome unter MacOS X Mavericks nicht. Hat jemand dieses Verhalten schon einmal erlebt?

BEARBEITEN Leider halte ich das nicht für einen Namespace-Konflikt. In meine Bibliothek importiere ich nur eine andere Bibliothek (außer jQuery), nämlichSigma js. Wie vorgeschlagen, schrieb ich Math in die Konsole und versuchte zu verstehen, welche Bibliothek Math überschrieb (unter Verwendung von "Show Function Definition"), mit dem folgenden Ergebnis, das aus einer Datei namens "VM53" (die ich nicht geschrieben und / oder verlinkt hatte) entnommen wurde direkt)

(function (){
    for (var i in window)
    {
    try {
            var jsType = typeof window[i];
            switch (jsType.toUpperCase())
            {                   
                case "FUNCTION": 
                    if (window[i] !== window.location)
                    {
                        if (window[i] === window.open || (window.showModelessDialog && window[i] === window.showModelessDialog))
                            window[i] = function(){return true;};
                        else if (window[i] === window.onbeforeunload)   // To try to fix onbeforeunload pop ups some users report seeing but I can't replicate.
                            window.onbeforeunload = null;
                        else if (window[i] === window.onunload)
                            window.onunload = null;                             
                        else
                            window[i] = function(){return "";};
                    }
                    break;                          
            }           
        }
        catch(err)
        {}      
    }

    for (var i in document)
    {
        try {
            var jsType = typeof document[i];
            switch (jsType.toUpperCase())
            {                   
                case "FUNCTION":
                    document[i] = function(){return "";};
                    break;                  
            }           
        }
        catch(err)
        {}      
    }

    try {
        eval = function(){return "";};              
        unescape = function(){return "";};
        String = function(){return "";};
        parseInt = function(){return "";};
        parseFloat = function(){return "";};
        Number = function(){return "";};
        isNaN = function(){return "";};
        isFinite = function(){return "";};
        escape = function(){return "";};
        encodeURIComponent = function(){return "";};
        encodeURI = function(){return "";};
        decodeURIComponent = function(){return "";};
        decodeURI = function(){return "";};
        Array = function(){return "";};
        Boolean = function(){return "";};
        Date = function(){return "";};
        Math = function(){return "";};
        Number = function(){return "";};
        RegExp = function(){return "";};

        var oNav = navigator;
        navigator = function(){return "";};
        oNav = null;            
    }
    catch(err)
    {}

})();

Antworten auf die Frage(8)

Ihre Antwort auf die Frage