Скриптакулярный параметр загрузки в FF 2.0.x - PullRequest
1 голос
/ 30 марта 2009

Привет всем,

Я пытаюсь явно загрузить библиотеки Scriptaculous библиотек Effects.js и builder.js на страницу, используя этот код:

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

Это работает как брелок в FF 3.0.x, IE7 и Opera 9.6.x. Однако в Firefox 2.0.x он не работает. Библиотеки никогда не загружаются. Чтобы заставить их загружаться в FF 2.0.x, я должен явно ссылаться на них с помощью двух дополнительных тегов , т.е.

<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>

Кто-нибудь знает, что такое поведение обусловлено несоответствием между FF 2.0 и 3.0? Есть ли лучшее решение моей проблемы?

Спасибо за вашу помощь!

1 Ответ

1 голос
/ 30 марта 2009

У меня сегодня было слишком много кофе, поэтому я решил, что попробую.

Одной из возможностей является функция load в scriptaculous.js , которая неправильно выполняет обработку для включения библиотек, переданных ей в качестве параметров (scriptaculous.js? Load = строитель, эффекты) .

Попробуйте добавить предупреждение, чтобы увидеть, вводится ли функция загрузки в scriptaculous.js, если это так, то процесс, вероятно, не делает то, что должен делать на FF2:

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

Если это не так, то (возможно) firefox 2 не хочет выполнять загрузку.

Последняя часть загрузки, кажется, делает работу для включения других библиотек:

$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') });
    }); 

Из приведенного выше кода я вижу, что включает переменную , которая должна анализировать имена библиотек, посмотреть, назначено ли что-нибудь, заменить на что-то вроде:

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

Это должно дать вам лучшее представление о том, что происходит. Хотя это небольшая интересная проблема, я бы определенно остановился на предложенном вами решении:

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...