2009-03-30 4 views
1

Grüße alle,Scriptaculous Lastparameter in FF 2.0.x

Ich bin versucht, explizit die effects.js laden zu und builder.js Scriptaculous Bibliotheken auf einer Seite, mit diesem Code:

<script type="text/javascript" src="/javascripts/scriptaculous.js?load=builder,effects"></script> 

Diese funktioniert wie ein Zauber in FF 3.0.x, IE7 und Opera 9.6.x. Es funktioniert jedoch nicht in Firefox 2.0.x. Die Bibliotheken werden niemals geladen. Um sie zu laden in FF 2.0.x zu bekommen, muss ich auf sie verweisen explizit mit zwei zusätzlichen </script >-Tags, das heißt:

<script type="text/javascript" src="/javascripts/scriptaculous.js?load=builder,effects"></script> 
<script type="text/javascript" src="/javascripts/builder.js"></script> 
<script type="text/javascript" src="/javascripts/effects.js"></script> 

jemand wissen Passiert was die discrepency zwischen FF 2.0 und 3.0 ist Das verursacht dieses Verhalten? Gibt es eine bessere Lösung für mein Problem?

Danke für Ihre Hilfe!

Antwort

1

Ich habe heute zu viel Kaffee getrunken, also denke ich, ich werde es versuchen.

Eine Möglichkeit ist die Last Funktion in scriptaculous.js nicht richtig um die Verarbeitung zu tun, die Bibliotheken an sie übergeben schließen als Parameter (scriptaculous.js? Last = Builder, Effekte).

Versuchen in einer Warnung setzen, um zu sehen, ob die Ladefunktion in scriptaculous.js in eingegeben wird, wenn es ist, dann geht der Prozess wahrscheinlich nicht tut, was es auf FF2 angenommen hat:

load: function() { 
    alert('In the load function!'); 
    ...rest of code here... 

Wenn dies nicht der Fall ist, möchte (vielleicht) Firefox 2 keine Last ausführen.

Der letzte Teil der Last scheint die Arbeit mit anderen Bibliotheken zu tun:

$A(document.getElementsByTagName("script")).findAll(function(s) { 
     return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) 
    }).each(function(s) { 
     var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); 
     var includes = s.src.match(/\?.*load=([a-z,]*)/); 
     (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
     function(include) { Scriptaculous.require(path+include+'.js') }); 
    }); 

Aus dem obigen Code, kann ich sehen, dass die Variable enthält die Bibliotheksnamen analysieren sollte, ob das ist, Wird irgendetwas zugewiesen, ersetzen Sie es mit etwas wie:

var includes = s.src.match(/\?.*load=([a-z,]*)/); 
alert(includes[0] + ' ' + includes[1]); 

Das sollte Ihnen eine bessere Vorstellung von dem, was vor sich geht. Während dies ein interessantes kleines Problem ist, würde ich definitiv mit der von Ihnen vorgeschlagenen Lösung gehen:

<script type="text/javascript" src="/javascripts/scriptaculous.js"></script> 
<script type="text/javascript" src="/javascripts/builder.js"></script> 
<script type="text/javascript" src="/javascripts/effects.js"></script> 
+0

Vielen Dank für Ihre Eingabe! Ich werde dies versuchen und Ihnen die Ergebnisse mitteilen. – AndreiM