Javascript – String als Funktion ausführen

      Kommentare deaktiviert für Javascript – String als Funktion ausführen

Wenn man die Google Maps Api einbindet, kann man damit ja viele schicke Sachen machen. Man kann z.B. einen Autocompleter für die Eingabe von Orten einbinden oder eine angepasste Google Map. Um diese Funktionen nutzen zu können, muss man die Google Maps API als JavaScript Datei laden.

Dies geht reicht einfach über die Codezeile:

<script src="http://maps.google.com/maps/api/js?v=3&sensor=false" type="text/javascript"></script>

Da Google aber die Verwendung der API auf 2500 Aufrufe pro Tag beschränkt, (Geo Coding API), wäre es ja sinnvoll, das Laden nur durch zu führen, wenn die Seite wirklich eine Google Map anzeigt bzw. wenn ein ein User sich lokalisieren möchte.

function googleMapsApi()
{
  scope = null;
  this.loadGoogleMapsApi = function (callback)
    {
        if (typeof(google) !== 'undefined' && typeof(google.maps) !== 'undefined')
        {
            // trick to execute the callback as a function
            window[scope][callback]();
            return;
        }
        var script = document.createElement("script");
        script.type = "text/javascript";
        script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=" + scope + "." + callback;
        document.body.appendChild(script);
    }
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://maps.google.com/maps/api/js?sensor=false&amp;callback=" + scope + "." + callback;
    document.body.appendChild(script);
    }
  }
  this.setScope(scopeToSet)
  {
    scope = scopeToSet;
  }
}

Der entscheidende Codeschnipsel ist der folgende:

window[scope][callback]();

scope ist in diesem Fall die Instanz der Klasse googleMapsApi.
callback ist die Funktion, die nach dem erfolgreichen Laden der GoogleMapsApi auf gerufen werden soll.
Damit kann man also einerseits eine JavaScript Datei direkt einbinden, andererseits aber auch einen Callback per String weiter geben.
Bevor jemand sagt, eval() hätte es auch getan:

Zitat http://www.jslint.com/lint.html

eval is evil
The eval function (and its relatives, Function, setTimeout, and setInterval) provide access to the JavaScript compiler. This is sometimes necessary, but in most cases it indicates the presence of extremely bad coding. The eval function is the most misused feature of JavaScript.