Как проверить, загружен ли swf с помощью JavaScript с помощью swfobject?

У меня есть следующий SWF:

    <head>
    # load js
    <script>
    function graph() {
     swfobject.embedSWF(
     "open-flash-chart.swf", "chart", "400", "180", "9.0.0", "expressInstall.swf",
     {"data-file":"{% url monitor-graph %}"});
        };
    </script></head>

<div id="chart"> </div>
<script>
graph();
</script>

Я хотел бы вызывать функцию графика только в том случае, если swf еще не загружен, есть ли способ сделать это? Спасибо.


person Ruben Quinones    schedule 15.10.2010    source источник


Ответы (3)


Последний аргумент embedSWF — это функция обратного вызова, которая вызывается при внедрении SWF-файла. Он принимает объект события с несколькими свойствами, обозначающими успех/неудачу и т. д. Подробнее об этом swfobject документация.

swfobject.embedSWF(
 "open-flash-chart.swf", "chart", "400", "180", "9.0.0", "expressInstall.swf",
 {"data-file":"{% url monitor-graph %}"}, {}, {}, 
   function(e) {
     if(e.success) graph();
   }
 );
person Jacob Relkin    schedule 15.10.2010
comment
проголосовал против - похоже, это не всегда так. Так как да, документы говорят нам, что последний параметр является обработчиком загрузки. Но он не вернет true, если файл не найден. Это цитата из предоставленной вами ссылки. ПРИМЕЧАНИЕ. Успех считается истинным, если доступен минимальный требуемый Flash-проигрыватель и что элемент DOM ‹object› плагина Flash для SWF был создан. SWFObject не может определить, действительно ли загрузился запрос файла swf или нет. - person shabunc; 15.02.2012
comment
Это частичное решение. ответ pipwerks правильный onw. - person Pierre; 16.10.2014

Используйте SWFObject для внедрения SWF, затем используйте функцию обратного вызова для опроса значения PercentLoaded SWF.

Если значение равно 0, SWF еще не загружен. Когда он достигает 100, SWF полностью загружен.

Вот руководство по опросу PercentLoaded с примерами кода. .

person pipwerks    schedule 17.04.2013
comment
Это правильное и полное решение. Даже если ему больше года, оно должно быть помечено как таковое. - person Pierre; 16.10.2014
comment
Пробовал это, но получаю Uncaught ReferenceError: ошибка e не определена. - person Paolo; 15.12.2014
comment
e определяется в такой функции, как var callbackfn = function(e) { if(e.success){} }. - person pipwerks; 18.12.2014

Обратный вызов swfobject возвращает успех, только если элемент DOM был успешно создан. На самом деле ничего не говорится о том, загружен ли SWF.

Из документации swfobject:

ПРИМЕЧАНИЕ. Успех считается истинным, если доступен минимальный необходимый проигрыватель Flash и создан элемент DOM подключаемого модуля Flash для SWF. SWFObject не может определить, действительно ли загрузился запрос файла swf или нет.

person Sebastiaan Moeys    schedule 17.04.2013