Valid XHTML Flash SWF Objects embedding

537

Для тих, хто не знає, що таке 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. в принципі не потрібно, можна залишити, можна і викинути. Викинемо.

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