swfobject.embedSWF ничего не делает. Чего мне не хватает?

#javascript #html #flash #swfobject #externalinterface

#javascript #HTML #flash #swfobject #externalinterface

Вопрос:

Я экспериментирую с SWFObject для встраивания flash-видеопроигрывателя на свой сайт. вот несколько фрагментов моего кода:

 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js"></script>

<script type="text/javascript">

if (typeof ARI == 'undefined')
{
     ARI = {};
}

ARI.InsertFlash = function()
{
    var flashvars = {};
    var parameters = {};
    parameters.quality = 'high';
    parameters.play = 'true';
    parameters.LOOP = 'false';
    parameters.wmode = 'transparent';
    parameters.allowScriptAccess='true';

    var attributes = {};

    attributes.id='ARIVID';

    swfobject.embedSWF("AS3MediaPlayer.swf","inlieu","720","405","9.0.0","",flashvars,parameters);
    }
</script>

...

<body>
<div class='inlieu'>
       <p> this will be replaced</p>
</div>
<button type='button' onclick='ARI.insertFlash();'>Insert</button>
  

Это ничего не делает. моя кнопка выполняет правильную функцию (пожалуйста, извините за любые ошибки html, которые могут быть на странице). Я проверил это с помощью div. Сама функция срабатывает, но мой div не заменяется. Чего мне здесь не хватает? Я хочу встроить флэш-объект, который использует внешний интерфейс, поэтому любые ответы на мой вопрос, которые учитывают это в контексте, были бы полезны. Также я хочу, чтобы это срабатывало, когда пользователь нажимает кнопку, а не при загрузке страницы, как показывает большинство примеров в Интернете.

Спасибо

Ари

Ответ №1:

SWFObject требует ID для целевого элемента, вы используете класс. Изменить class='inlieu' на id='inlieu'

Кроме того, поскольку вы указываете идентификатор в атрибутах, ваш новый объект будет иметь идентификатор ARIVID и НЕ будет наследовать идентификатор inlieu

Это

 <body>
<div id='inlieu'>
   <p> this will be replaced</p>
</div>
<button type='button' onclick='ARI.insertFlash();'>Insert</button>
  

станет этим

 <body>
<object id="ARIVID" ... ></object>
<button type='button' onclick='ARI.insertFlash();'>Insert</button>
  

Ответ №2:

вы загружаете swfobject из http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js
Поместите файл в тот же домен, что и ваш swf / html, и ваша проблема должна исчезнуть.
Помимо попыток украсть пропускную способность, у вас нет причин загружать из Google, и это может вызвать проблемы с версией, если они решат обновить эту кодовую базу чем-то новым.

Также вы должны вызывать эту функцию при загрузке или при нажатии кнопки, как вы указали. Опубликованный вами код выполняется до завершения загрузки страницы, и этот файл javascript из Google, возможно, еще не загружен.
Вы можете проверить это, поместив этот код прямо перед инструкцией embed .

 alert( swfobject );
  

Комментарии:

1. загрузка из googleapis.com все в порядке, это ни на что не повлияет.

2. Загрузка библиотек из центрального расположения не обязательно «крадет пропускную способность» и имеет ряд преимуществ. Это не вызовет проблем с версией, поскольку библиотека имеет версию в URL. Вам не нужно вызывать swfobject при загрузке, потому что swfobject работает таким образом по умолчанию.