Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Про динамическую загрузку excanvas. 
:(
    Опции темы
ksnk
Дата 4.6.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 2
Всего: 386



Это не совсем "наши скрипты", но вроде не так уж и не к месту.

В принципе, с использованием библиотеки excanvas  можно решить, в достаточно широком смысле, проблемы с кроссброузерностью этого тега. Вставка библиотеки в страничку по документации рекомендуется делать вот так
Код

<!--[if IE]><script type="text/javascript" src="excanvas.compiled.js"></script><![endif]-->

получается достаточно прилично и в ненужные броузеры ненужные функции грузится не будут.

Сложее, если загрузка этого файла требуется в динамике. К примеру после подгрузки ajax модуля оказывается интересным его подкрасить вручную. Вот в этом случае придется покувыркаться.

для начала - динамическая загрузка скрипта excanvas с проверкой его загруженности.
Код

var util={
..
     appendScript:function(src,callback){
        var scriptElem = document.createElement('script');
        scriptElem.setAttribute('type','text/javascript');
        if(callback){
         scriptElem.onload=function(){
             scriptElem.onreadystatechange=null;
             scriptElem.onload=null;
             callback();
         };
         scriptElem.onreadystatechange=function(){
             if ('loaded' == this.readyState) {
                 scriptElem.onload();
             }
         }
        }
        scriptElem.setAttribute('src',src);
        document.getElementsByTagName('head')[0].appendChild(scriptElem);
    },
...
};


вызов вставки кода делается примерно так, с использованием условной компиляции от IE : 
Код

    /*@if (@_jscript_version >= 1)
     this.appendScript('excanvas.compiled.js',function(){util.excanvas_complete=true;});
    /*@end @*/        

К сожалению, инициализация библиотеки excanvas завязана на событие onreadystatechange. которое в AJAX приложении уже сработало и больше не вызывается, так что его нужно поддернуть вручную.
Код

    /*@if (@_jscript_version >= 1)
            function xxx(){
              if(this.excanvas_complete && G_vmlCanvasManager){
                if (!document.namespaces || !document.namespaces['g_vml_']){
                    G_vmlCanvasManager.init_(document);
                } 
// собственная инициализация полотна
                fly=document.createElement('canvas');
                fly.setAttribute('id', 'fly');
                fly.setAttribute('width','<%=$fWidth%>');
                fly.setAttribute('height','<%=$fHeight%>');
                this._fly_element=document.body.appendChild(fly);
                G_vmlCanvasManager.initElement(this._fly_element);
              }
              else
                setTimeout(xxx.bind(this),100);
            }
            setTimeout(xxx.bind(this),100);
        @else @*/
// собственная инициализация полотна
            fly=document.createElement('canvas');
            fly.setAttribute('id', 'fly');
            fly.setAttribute('width','<%=$fWidth%>');
            fly.setAttribute('height','<%=$fHeight%>');
            this._fly_element=document.body.appendChild(fly);
        /*@end @*/
        

Тут используются те факты, что переменная G_vmlCanvasManager выставляется самим excanvas, а по изменениям в document.namespaces можно понять вызвался ли инициализатор или нет. Опять-же, динамически созданный элемент canvas нужно проинициализировать вручную, вызвав для него G_vmlCanvasManager.initElement.
Идеология ожидания событияпростая, сидим в таймаутах по 100 ms и дожидаемся, пока не выставятся нужные признаки...

Функции и техника, вероятно, могут быть полезны при использовании и других сторонних скриптов...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Здесь публикуют скрипты, которые уже проверены в обсуждениях других тем (при этом полезно поставить ссылки на все смежные обсуждения) или переносятся кем-либо из модераторов по просьбе участников, если видно, что в результате обсуждения темы был написан полезный или интересный скрипт. Третий возможный вариант - участник форума публикует скрипт, заведомо известный как полезный и эффективный, для, возможно, небольшой доработки и обсуждения.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Наши скрипты | Следующая тема »


 




[ Время генерации скрипта: 0.1041 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.