PDA

Просмотр полной версии : Тестирование альтернативного содержимого в html (когда нет флеш-плейера)


taifa
16.01.2007, 16:58
Вопрос не совсем по флешу. Скорее по настройкам IE (если таковые имеются). Задала альтернативное содержимое в теге object, отвечающего за показ флеш-меню в html (иначе, если у пользователя нет флеш он бедный останется у меня без навигации).
Как можно протестировать этот самый альтернативный режим не прибегая к деинсталляции флеш-плейера у себя на компе - данную меру считаю слишком зверской. Уверена, что в можно покопаться в настройках IE и как-то отключить воспроизведение флешек.

CorC
16.01.2007, 17:49
через яву можно заценить версию плеера, если ее нет то навигировать явой...

CorC
16.01.2007, 17:52
вот щаз посмотрел как это можно сделать:
file->publish settings
ставим галку html
переходим на вкладку html
и там ставим галку detect flash version
потом жмем на publish внизу
и изучаем полученные html файлы

taifa
16.01.2007, 19:01
Кажется, меня немного не поняли. Вроде с тем, как задать альтернативный режим, я разобралась сама.
Не имею понятия как ПРОТЕСТИТЬ этот режим без сноса плейера (очень не хоца того делать). Помню, в опере флешки как-то отключались. Но беда в том, что в данным момент дистриба для оперы у меня нет. Возможно ли как-то отключить флешки в ie?

taifa
16.01.2007, 19:03
через яву можно заценить версию плеера, если ее нет то навигировать явой...
Кстати, если не сложно, можно пример кода на яве или лучше пхп?

Kikasso
17.01.2007, 00:04
http://blog.deconcept.com/swfobject/
этим пользуются все,
далее "задираешь планку", то есть требуешь 10 плеер, у тебя его нету, значит будет показан альтернативный контент.

taifa
17.01.2007, 00:58
хм... а можно как-то выдрать переменную из php и передать ее жаваскрипту? Извиняюсь, если где-то ступила, если что.

Kikasso
17.01.2007, 01:32
Конечно можно. php стоит на серваке, что хочет то и выдает в броузер.

taifa
17.01.2007, 01:42
какой-то глюк с этим swfobject выводится относительно размера экрана не с позиции 0,0, а примерно с поизии 5,5 (это если на глаз). А меня так не устраивает - дизайн весь расплывается - сверху и слева от моей флешки теперь белое пустое пространство. Кстати, кто-нибудь может рассказать как включение флеш взаимодествует с тегами div с установленными Z-индексами? Все никак с ними поладить не могу - хоть что делай, а флешка всегда вперед вылазит.

Kikasso
17.01.2007, 02:07
в head:
<script type="text/javascript" src="js/swfobject.js"></script>
<style type="text/css">
#flashcontent {
width: 300px;
height: 300px;
}
</style>
в body: <div id="flashcontent" >
&nbsp;&nbsp;[ flash goes here ]
</div>
<script type="text/javascript">
// <![CDATA[
var so = new SWFObject("swf/3d2.swf", "sq", "300", "300", "6", "#D4D4D4");
so.write("flashcontent");
// ]]>
</script>это со старого сайта - все нормально.
еще у меня стоит <BODY bgcolor="#D4D4D4" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">но это тоже лучше задавать через style.
Про z-index: so.addParam("wmode", "window" ); или "opaque" или "transparent" (последние не советую) и все заработает. Посмотрите на форуме про wmode

taifa
17.01.2007, 02:42
Спасибо большое. Теперь вот парюсь с передачей параметров в флешку из пхп. Отправляю с помощью addVariable переменную xml, только не знаю, как ее во флеш выдрать теперь.

Юзаю такой код:

<? $xml = $APPLICATION->GetMenuHtmlEx("top")?>
<script type="text/javascript" src="/bitrix/templates/tnadzor/swfobject.js"></script>

<script type="text/javascript">
var so = new SWFObject("/bitrix/templates/tnadzor/header.swf", "mymovie", "1019", "199", "7", "#003300");
so.addVariable("xml", <? echo $xml;?>);
so.write("flashcontent");
</script>

etc
17.01.2007, 03:13
XML в html-коде не передают. Нужно использовать внешний xml-файл.

Kikasso
17.01.2007, 04:35
Спасибо большое. Теперь вот парюсь с передачей параметров в флешку из пхп. Отправляю с помощью addVariable переменную xml, только не знаю, как ее во флеш выдрать теперь.
пересылай path_to_xml, во флеше он появится на основном таймлайне.
Ну то есть _root.path_to_xml будет содержать то что ты отправишь.

Далее класс XML флеша, load(), onLoad() и прочее.

taifa
17.01.2007, 11:21
хм... слабо себе представляю. Страница, с которой подгружается меню - шаблон для всех страниц сайта. Текст меню высчитывается динамически отдельно для каждой странице и заранее предугадать, где будет храниться файл с текстом меню - нереально. Обмозговав ситуацию, пришла к выводу, что удобнее всего передать xml-текст, а потом на основе его сгенерировать меню. Раньше (при использовании <object>) такой вариант работал стабильно. Неужели нельзя передать параметр через swfobject минуя создание доп.файлов? Не верю)))

etc
17.01.2007, 11:25
А теги фильтровать кто будет? XML всегда внешний файл.

taifa
17.01.2007, 11:32
Есть ли возможность передать флешке через swfobject массив каких-либо значений?

etc
17.01.2007, 13:56
Есть, но не передают через flashvars большие объемы данных!

taifa
17.01.2007, 14:35
Я, наверно, совсем даунито и никогда с этом чертовым меню от вас не отстану... Хоть потом диссертацию по нему пиши "психология новичка или почему все новички задают одинаковые вопросы и нихрена понять не могут")))
Странное дело. Сейчас тестирую загрузку xml из файла и получается следующее:

Текст загружаемого файла:

<menu>
<item name="О журнале" link="/about/index.php" active = "false"/>
<item name="Публикации" link="/publications/index.php" active = "false"/>
<item name="Подписка" link="/subscribe/index.php" active = "false"/>
<item name="Рекламодателям" link="/sign/index.php" active = "false"/>
</menu>


(пока юзаю обыкновенный статический xml, но в принципе уже готов php, выдающий то же самое, только получая актуальные данные о пунктах меню)

Загрузка данных во флеше (фрагмент):

menu_xml = new XML();
menu_xml.ignoreWhite = true;
menu_xml.onLoad = function(ok) {
if (ok) {
F_createMenu();
}
};
menu_xml.load(_root.path);

F_createMenu = function () {


my_fmt1 = new TextFormat();
my_fmt1.bold = true;
my_fmt1.size = 12;
my_fmt1.font = "Arial";
my_fmt1.color = "0xFF0000";
createTextField("t1", b.getNextHighestDepth(), 0, 0, 200, 20);
with (t1)
{
text = menu_xml.toString();
multiline = false;
autoSize = true;
wordWrap = false;
setTextFormat(my_fmt1);
}
//...дальше пока неважно

}

Как видно, в TextFormat пихаю содержимое созданного xml.

И что же выдает мне этот самый TextFormat:

<menu />


И просто медленно сползаю под стол...
И куда делись все узлы xml? Кто-нибудь подскажет?

taifa
17.01.2007, 14:41
Есть ли возможность передать флешке через swfobject массив каких-либо значений?
Есть, но не передают через flashvars большие объемы данных!
Ладно. Поверю вам, что нужно юзать xml. Но расскажите все равно про массивы - на будущее.

Ну и еще - мне кажется, менюшка не такой уж и большой объем данных - это ж не таблица из базы с 1000 записями.

iNils
17.01.2007, 14:46
XML должен быть в кодировке UTF-8

taifa
17.01.2007, 15:13
Опять я!
Добавила строку о кодировке. Теперь со статическим файлом все работает отлично (спасибо iNils). Однако, подрубив динамический пхп-файл, опять получаю ту же проблему.
Пхп генерит следующее:

<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8" ?>
- <menu>
<item itemname="О журнале" link="/about/index.php" active="false" />
<item itemname="Публикации" link="/publications/index.php" active="false" />
<item itemname="Подписка" link="/subscribe/index.php" active="false" />
<item itemname="Рекламодателям" link="/sign/index.php" active="false" />
</menu>

На выходе получаю:

<?xml version="1.0" encoding="utf-8"?><menu />

Блин, теперь не только я под стол сползаю, но и потолок туда же. Но не отстану, пока своего не получу)).

ПС: Истина где-то рядом, я это чувствую...

iNils
17.01.2007, 15:17
Строка о кодировке не нужна. Нужен сам файл (символы) в данной кодировке. Php не поддерживает utf-8 напрямую, надо перекодировать с помощью iconv (http://flasher.ru/forum/search.php?do=process&q=iconv)

etc
17.01.2007, 15:29
Строка о кодировке не нужна.
Нужна-нужна.

iNils
17.01.2007, 15:31
Нужна-нужна.
Может и комуто и нужна, а флеш съест файл не только без encoding="utf-8", но и вообще без <?xml version="1.0" encoding="utf-8"?>.

etc
17.01.2007, 16:52
Понятно, что съест. Но заголовок полагается.

taifa
17.01.2007, 17:14
Yo!
Сначала напоролась на Call to undefined function: iconv()... блаблабла...
Искала по форумам - короче там было слабо понятно, что делать.
В итоге понятный ответ нашла на:
http://oscommerce.su/modules/smartfaq/print.php?faqid=1
(это для будущих поколений таких как я, чтоб, если уж найдут темы - так чтобы не мучились))))

только вот - теперь белибарда какая-то вместо русского. Блин. Коряво как-то осознавать себя одним из многих, напоровшихся на эту белиберду. Вообще, судя по форумам - я прохожу вполне себе стандартный путь. Небось, вы все тож через него прошли. Ладно. Думаю дальше.

Kikasso
17.01.2007, 18:28
не надо ничего перекодировать. В блокноте сохрани xml как utf-8 и все дела. Если вдруг нет блокнота (шутка), можно сказать System.useCodepage = true; но как сказано в хелпе If you set System.useCodepage to true, remember that the traditional code page of the operating system running the player must include the characters used in your external text file in order for the text to display. For example, if you load an external text file that contains Chinese characters, those characters cannot display on a system that uses the CP1252 code page because that code page does not include Chinese characters.
то есть так джедаи не поступают.
вот этого<?xml version="1.0" encoding="utf-8"?> тоже не надо, зачем мусор слать?

etc
17.01.2007, 18:34
Это по вашему мусор?? Это обязательное объявление типа документа XML! И неважно, что флеш не парсит этот заголовок! И вовсе не факт, что только флеш будет читать невалидный XML.

Kikasso
17.01.2007, 18:41
ну давайте тогда и <!DOCTYPE > посылать.

etc
17.01.2007, 18:47
Это было бы, конечно, идеально.

taifa
17.01.2007, 18:52
В блокноте сохранить не могу - фича как раз в том, чтобы генерить xml динамически для каждой страницы сайта. А вообще, всем большое спасибо. У меня заработало.
Единственное - разбираюсь теперь как в мой xml в зависимости от пути до страницы записать инфо об активном пункте. Движок, с которым я работаю имеет алгоритмы вычисления активного пункта (не только ссылка, указанная в меню, но и все файлы и подкаталоги из этой папки должны быть подсвечены в меню как активные) - надо только найти, где они эти алгоритмы спрятали)))

Kikasso
17.01.2007, 18:55
Кстати, насчет валидности. Вот этого if (ok) {
F_createMenu();
} мало, нужно еще проверить status

if (!ok ){
// файл не найден
}else if(this.status < 0){
// невалидный xml
}else{
// все нормально
F_createMenu();
}

Потому что при ошибке 404 вполне может оказаться ok == true

iNils
18.01.2007, 03:23
Понятно, что съест. Но заголовок полагается.Не занудствуй. Можешь ставить, можешь нет, на работоспособности флеша это не отразится, а обсуждаем мы именно это.

taifa
18.01.2007, 10:41
Не занудствуй. Можешь ставить, можешь нет, на работоспособности флеша это не отразится, а обсуждаем мы именно это.
)))))
Думаю, я вас поняла, господа профессионалы...

etc
18.01.2007, 11:10
iNils, ну нельзя действовать по принципу «если и так работает, то пусть так и останется». Даже браузер может просто не определить кодировку документа, если ему не подсказать.

etc
18.01.2007, 15:59
taifa, разницу между XML и HTML ощущаете, нет? И между <!DOCTYPE и <?xml, а?

taifa
18.01.2007, 16:04
taifa, разницу между XML и HTML ощущаете, нет? И между <!DOCTYPE и <?xml, а?
Ну вы прямо как мой бывший начальник. Кстати, именно из-за этого человека я и уволилась с предыдущей работы)))... И счастлива)))

iNils
19.01.2007, 11:10
iNils, ну нельзя действовать по принципу «если и так работает, то пусть так и останется». Даже браузер может просто не определить кодировку документа, если ему не подсказать.
И часто ты в xml декларацию типа документа (<!DOCTYPE...) пишешь?

etc
19.01.2007, 11:24
DOCTYPE нет, но вы хотите ещё и <?xml сократить, просто потому что «работает и так». Много чего поначалу работает «и так». А потом не работает.

Кроме того, перед моим предыдущем постом была ссылка на тему DOCTYPE в HTML, типа объявлять или нет.
XML != HTML, <?xml != DOCTYPE, не нужно смешивать. В XML всё жестко и ясно описано, что должно быть, а чего не должно быть.

iNils
19.01.2007, 11:32
Кроме того, перед моим предыдущем постом была ссылка на тему DOCTYPE в HTML, типа объявлять или нет.
XML != HTML, <?xml != DOCTYPE, не нужно смешивать. В XML всё жестко и ясно описано, что должно быть, а чего не должно быть.
http://www.w3.org/TR/2000/REC-xml-20001006#NT-doctypedecl

etc
19.01.2007, 11:48
Ну и? Помимо <?xml с вас ещё потребуют DOCTYPE. А не писать ни то, ни другое ещё хуже, чем написать хотя бы что-то одно.

iNils
19.01.2007, 12:08
Ну и? Помимо <?xml с вас ещё потребуют DOCTYPE. А не писать ни то, ни другое ещё хуже, чем написать хотя бы что-то одно.Вот я и спрашиваю, ты описываешь декларацию документа? Если да, то молодец и вопрос закрыт, если нет, то вопрос об использовании декларации документа <?xml...> просто придирка (я говорю только об исключительном использование для флеша). Сама макромедия, в некоторых xml не указывает <?xml...>

О валидности:
Невалидный (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.inils.ru%2Ftest.xml&charset=%28detect+automatically%29&doctype=Inline&ss=1)
Валидный (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.inils.ru%2Ftest_cur.xml&charset=%28detect+automatically%29&doctype=Inline&ss=1)

Kikasso
19.01.2007, 12:26
О валидности:
Невалидный (http://validator.w3.org/check?uri=http%3A%2F%2Fwww.inils.ru%2Ftest.xml&charset=%28detect+automatically%29&doctype=Inline&ss=1)

Такой xml флеш не съест, потому что там амперстанд присутствует и просит CDATA.

http://www.adobe.com/crossdomain.xml
Этот тоже невалидный.

iNils
19.01.2007, 14:03
Такой xml флеш не съест, потому что там амперстанд присутствует и просит CDATA.Я бы сначала проверил на твоем месте, прежде чем это утверждать.

etc
19.01.2007, 14:08
Я не объявляю DOCTYPE, но категорически против удаления заголовка, который информирует о кодировке документа. Представь себе ситуацию, что тебе придется грузить какой-либо XML, а кодировка его неизвестна и не указана. Что будешь делать? Или, к примеру, дашь какому-нибудь товарищу, незнакомому с flash, отредактировать подобный XML. Не глядя он сохранит его в win1251.

iNils
19.01.2007, 14:15
Я не объявляю DOCTYPE, но категорически против удаления заголовка, который информирует о кодировке документа. Представь себе ситуацию, что тебе придется грузить какой-либо XML, а кодировка его неизвестна и не указана. Что будешь делать? Или, к примеру, дашь какому-нибудь товарищу, незнакомому с flash, отредактировать подобный XML. Не глядя он сохранит его в win1251.Я не очень понял при чем тут кодировка, нам нужна кодировка файла, мы же не в браузере открываем. Кроме того, если ты смотрел ссылку с валидатором на пример с корректным файлом, то там encoding вообще не указан, но валидатор на это ругаться не стал.

etc
19.01.2007, 14:36
мы же не в браузере открываем.
Тоже не факт. Автоопределение тоже не всегда корректно работает. Просто нужно заранее и наперед подразумевать, что XML может работать не только во Flash.
В общем, если мне не дай бог придёться работать с человеком, который принебрегает данным заголовком, я его заставлю его дописать во все XML-файлы, что есть.

Kikasso
19.01.2007, 14:50
Я бы сначала проверил на твоем месте, прежде чем это утверждать.
Интересные дела..
Кушает даже такого вида:
<& &="&">&</&>
но все - таки плохо переваривает, получаем после trace:
<& &="&amp;">&amp;</&>
Но это сугубо флешовые дела, ни FF ни iE такого не переносят. Я бы даже отнес это к багам.

Kikasso
19.01.2007, 14:52
Или, к примеру, дашь какому-нибудь товарищу, незнакомому с flash, отредактировать подобный XML. Не глядя он сохранит его в win1251.
И чем тут поможет заголовок с кодировкой?

etc
19.01.2007, 14:55
И чем тут поможет заголовок с кодировкой?
Ну если не идиот, то сохранит в той, что указана. Когда ничего не написано — сохранит в первой попавшейся.

DarkLight
19.01.2007, 14:59
А это когда как. Был случай, когда мне утверждали что xml в utf-8 т к так было в заголовке написано. А файл был в win1251 сохранен.

Kikasso
19.01.2007, 15:02
Ну если не идиот, то сохранит в той, что указана. Когда ничего не написано — сохранит в первой попавшейся.
Когда ничего не написано - сохранит в той, в которой открывал.

etc
19.01.2007, 15:05
Когда ничего не написано - сохранит в той, в которой открывал.
Вовсе необязательно.

DarkLight, и такое бывает. Потому что скорее всего уже такой документ прошел через руки этого идиота.

Kikasso
19.01.2007, 15:12
А мудро ли такому человеку xml доверять?
PS:: может тему - во "флейм" и еще страниц этак дцать?

iNils
19.01.2007, 15:14
В общем, если мне не дай бог придёться работать с человеком, который принебрегает данным заголовком, я его заставлю его дописать во все XML-файлы, что есть.Как бы тебя декларацию типа документа не заставили везде прописывать.:mosking:
Автоопределение тоже не всегда корректно работает.
Иван Дембицкий пишет: (http://www.artlebedev.ru/tools/technogrette/etc/flash-xml/)
XML.docTypeDecl, XML.xmlDecl
Flash никак не интерпретирует узлы XML, содержащие объявления типа документа и анализаторы достоверности. Такие узлы в текстовом виде помещаются в соответствующие свойства XML-объекта и никак не влияют на разбор или декодировку данных.

Пример узлов объявления типа документа:

<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE Imprimatur SYSTEM "/entities.dtd">

В данном примере указание кодировки «windows-1251» никак не повлияет на разбор этого XML-документа во Flash. Детальнее практика применения различных кодировок будет рассмотрена далее в этой книге.

Просто нужно заранее и наперед подразумевать, что XML может работать не только во Flash.Можно много чего подразумевать. Все зависит от специфики.

Вывод: для xml указывать декларация документа желательно, но не обязательно при условии, что он используется только для флеша.

iNils
19.01.2007, 15:20
Но это сугубо флешовые дела, ни FF ни iE такого не переносят. Я бы даже отнес это к багам.Обычно, для проверки корректности xml, я просто открываю его в IE, если он не ругается, значит все ок, флеш съест.

А это когда как. Был случай, когда мне утверждали что xml в utf-8 т к так было в заголовке написано. А файл был в win1251 сохранен.Хороший пример. И дело может быть не только в идиоте, но и в обычной путанице. Я всю кодировку через Far проверяю, там сразу видно юникод это или нет.

taifa
19.01.2007, 15:26
__etc успокойтесь уже. Новичкам свойственно ошибаться. В этом наша сущ(ч)ность. <?xml прописала, между прочим. С самого начала.

taifa
19.01.2007, 15:44
В общем, если мне не дай бог придёться работать с человеком, который принебрегает данным заголовком, я его заставлю его дописать во все XML-файлы, что есть.
Ей богу, мой бывший начальник.

Kikasso
19.01.2007, 15:56
Обычно, для проверки корректности xml, я просто открываю его в IE, если он не ругается, значит все ок, флеш съест.
Так и я так делаю, но "&" ни FF, ни iE не кушают, поэтому я так уверенно и написал.