Valid XHTML Flash SWF Objects embedding

120

Для тих, хто не знає, що таке XHTML і не чув про таке сайті, як W3C.org або просто напросто не займається валідацією XHTML-a, ця стаття, в принципі, буде марною.

Особисто для мене, дійсний XHTML, не те щоб дуже важливий, але за час роботи Web Developer-му валідація написаного коду увійшла в звичку — я навіть вже не звертаю особливої уваги на це, а чисто автоматично пишу дійсний XHTML, хоч у мене і встановлений Add-On для Firefox-a: Html Validator .

Це маленьке вступ нітрохи не хвастощі, всього лише невелика мотивація написання цього статті. Якщо ви, так само як і я, перевіряєте валідність XHTML-a, то думаю стикалися з тим, що Flash об’єкти не проходять валідацію. Особисто я не звертав на це уваги, оскільки це ніяк не впливало на відображення сторінок і до недавнього часу не було обов’язковою вимогою з боку замовника (повністю валідний код разом з flash-ем).

Код, наведений нижче, це код, який генерується Macromedia (тепер уже компанії Adobe Flash-му при “публікації” .SWF разом із .HTML-сторінкою. Macromedia/Adobe Dreamweaver при вставці .SWF генерує практично такий же код:


so.write(“flashcontent”);

Всі можливі параметри, які можна передавати функції SWFObject:

var so = new SWFObject(swf, id, width, height, version, background-color [, quality, xiRedirectUrl, redirectUrl, detectKey]);

Трішки детальніше про кожного. Спершу обов’язкові параметри:

swf – Нехай Flash ролика.
id – ID елемента, куди буде вставлятися Flash (в нашому випадку – “flashcontent”).
width – Ширина Flash ролика.
height – Відповідно, висота ролика.
background-color – Колір фону у ролика.

Можливі додаткові параметри:

quality – Якість відображення. За замовчуванням “high”.
xiRedirectUrl – Адресу, куди перенаправляти користувачів після ExpressInstall upgrade.
redirectUrl – Адресу перенаправлення користувачів без необхідної версії Flash Player-a.
detectKey – Спеціальна “URL” на випадок, коли немає необхідності перевіряти на наявність Flash-a, шляхом додавання до URL з документом ?detectflash=false

І це не все. SWFObject вміє ще багато всього корисного. Наприклад, задавати прозорість у Flash ролика і передавати йому Flashvars (повний список параметрів):

var so = new SWFObject(“logo.swf”, “flashcontent”, “180”, “80”, “8”, “#FFFFFF”);
so.addParam(“wmode”, “transparent”);
so.addVariable(“variable1”, “value1”);
so.addVariable(“variable2”, “value2”);
so.addVariable(“variable3”, “value3”);
so.write(“flashcontent”);

Думаю, не важко здогадатися, що цей спосіб мені більше сподобався, приділеного уваги і часу на його опис.

Спосіб №2.

Брутальний спосіб.

1. Викидаємо тег – він не потрібен і він, як раз, і не проходить валідацію.
2. “Страшна” частина з classid робить лише те, що “каже” Internet Explorer-у який player використовувати. З цим чудово справляється type=”application/x-shockwave-flash”, тому classid теж можна викинути.
3. Атрибут codebase вказує посилання на копію Flash Player-а на сервері Macromedia, що є не правильним використанням цього атрибута. Правда, в деяких браузерах (Internet Explorer), цей атрибут виконує ще одну функцію – вказує яку версію Flash Player-а треба використовувати для перегляду .SWF і якщо необхідна інша версія, користувачеві пропонується встановити її. Коротше, codebase теж викидаємо.
4. в принципі не потрібно, можна залишити, можна і викинути. Викинемо.

У підсумку отримуємо конструкцію, набагато приємну для ока, так і для валідатора: