Umgang mit doppeltem jquery

Issue #428 resolved
Michael Bieler created an issue

##Beschreibung

###Feedback cit: https://if2015.cit.de/intelliform/forms/hh/mml/hh_mml_dev_v3/index

In der JavaScript-Konsole findet sich ein Fehler "Uncaught TypeError: $.cookie is not a function". Ursache ist vermutlich ein Konflikt zwischen dem jQuery, das Sie laden und dem jQuery, das wir laden. Der Fehler scheint die die Integration zunächst nicht gravierend zu beeinträchtigen. ... es gibt keinen Konflikt mit den jQuery-Versionen sondern das MapControl lädt seine Version von jQuery (welches window.$ setzt) und ersetzt unsere Version von jQuery (welches window.$ war) auf dem aber bereits Plugins (wie das Cookie Plugin) registriert waren

Sie müssen dafür sorgen, dass nachdem ihre jQuery Version geladen wurde, sofort "$.noConflict(true)" aufgerufen wird. Damit wird unsere Instanz von window.$ wiederhergestellt. Siehe https://api.jquery.com/jQuery.noConflict/

Wir verwenden übrigens Version 1.12.2 weil diese Version nicht von einer XSS vulnerability betroffen ist. Die von Ihnen verwendete Version 2.2.4 ist davon betroffen. Siehe https://github.com/jquery/jquery/issues/2432

###update cit macht das als workaround im portalready-Event, sollten wir aber selber in der Hand haben und für hh.de brauchen wir das ohnehin.

###hamburg.de: dort gibt es ebenfalls ähnliche Fehler aufgrund eines überschriebenen JQuery, auf das schon Plugins registriert waren: http://www.hamburg.de/werbetest/lgvmapclient

##Notizen Absprache mit Seb Duden + Robin:

  • jquery.noConflict können wir in main aufrufen, wenn backbone geladen wurde.
  • für unsere Entwicklungsumgebung: die jquery-version , die in der Ziel-Seite geladen ist (afm:1.12.2 / hh.de: 1.7.1) global in index.html laden (kommt dann produktiv von afm bzw. hh.de)
  • $ ist dann die global geladene version, Backbone.$ ist dann unsere, d.h. 2.2.4.
  • erster Test ergab, dass wir mit der globalen (1.12.2) auch funktionieren (v.a. unsere Libs), ganz sauber, wäre es die Referenzen auf $ auf Backbone.$ umzubiegen
  • als Option in der config.js vorsehen: jQueryNoConflict: boolean

Comments (2)

  1. Log in to comment