Показаны сообщения с ярлыком передача параметров. Показать все сообщения
Показаны сообщения с ярлыком передача параметров. Показать все сообщения

03 сентября 2012

встраивание компонентов в HTML-страницы

снова обращаюсь к книжке по ActionScript2.0 Дмитрия Гурского "Программирование во Flash MX 2004". часть информации несколько устарела или скоро устареет, но я нашла для себя много полезного. плюс легкий и доступный неспециалистам вроде меня язык.
главу помещаю без изменений и сокращений, хотя, возможно, и стоило сделать выжимку... но мне кажется правильным оставить немного истории - для пущего понимания :)

темы поста:
  • помещение компонентов в HTML-страницы
  • передачи внешних данных во Flash-ролик 
  • два способа передачи параметров


16.5.1. Теги <EMBED> и <OBJECT> 
Мы можем публиковать SWF-фильмы как компоненты HTML-страниц благодаря тому, что браузеры могут включать внешние исполнимые модули.  Во времена  «войны браузеров»  середины 1990-х годов компании Microsoft и Netscape пошли разными путями в реализации этой возможности. Microsoft разработала знаменитую технологию ActiveX, позволяющую при соблюдении ряда условий динамически включить в браузер исполнимое приложение. Netscape избрала более стандартный, но и более безопасный путь, просто введя поддержку плагинов. Не вдаваясь в подробности, отметим, что для пользователя в случае Flash разница между этими технологиями заключается в том, как происходит установка плейера. Если Internet Explorer обнаруживает, что страница содержит SWF-фильм, для которого в системе нет проигрывателя, то он выводит панель с предложением импортировать Flash-плейер с сайта компании Macromedia. Если пользователь соглашается, то установка приложения осуществляется прямо в процессе просмотра страницы и не требует
перезапуска браузера.  В случае же Netscape Navigator  все происходит по-иному.  Пользователь должен самостоятельно скачать и установить плейер. После этого браузер должен быть перезапущен. 

Для встраивания компонентов, использующих технологию ActiveX, Microsoft  добавила в HTML тег <OBJECT>.  Соответственно,  для своей технологии плагинов Netscape  придумала тег<EMBED>. 
К концу 1990-х годов HTML был полностью стандартизирован. Единообразия ради тег <EMBED>  был исключен из стандарта. Встраивание внешних компонентов было полностью возложено на тег <OBJECT>. На данном этапе его поддерживают все современные браузеры. Тег же <EMBED> нее больше уходит в историю. 

Тег <OBJECT> впервые начал поддерживаться еще Microsoft Internet Explorer 3.0. тег <EMBED> появился во времена Netscape Navigator 2.0. Где-то до 1999 года они существовали параллельно, после чего <EMBED> начал сдавать позиции. В принципе, сейчас можно довольно смело публиковать SWF-фильм, используя только тег <OBJECT>. Однако если вы хотите, чтобы содержимое вашего сайта было доступно абсолютно всем посетителям,  теги <OBJECT>  и <EMBED>  нужно использовать совместно. Тег <EMBED> вкладывается в <OBJECT>. Если браузер не сможет распознать тег <OBJECT>,  он просмотрит его содержимое и,  обнаружив тег <EMBED>,  выполнит прописанные в нем инструкции. Если же браузер достаточно современный, чтобы поддерживать
тег <OBJECT>, то <EMBED> будет попросту проигнорирован.

Типичный HTML-код,  используемый для публикации SWF-фильмов,  может быть сгенерирован Flash автоматически. Для этого нужно поставить флажок HTML на закладке Formats окна Publish Settings и нажать кнопку Publish. В результате будет создан приблизительно следующий код (приведем лишь ту его часть, которая непосредственно отвечает за публикацию фильма): 

<object 
Classid="clsid:d27cdb6e-ae6d-llcf-96b8-444553540000" 
codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash. 
cab#version=7,0,0,0" 
width="550" height="400" id="mov.swf" align="middle"> 
<param name="allowScriptAccess" value="sameDomain"/> 
<param name="movie" value="mov.swf"/> 
<param narae="quality" value="high"/> 
<param name="bgcolor" value="#ffffff"/> 
<embed  src="mov.swf"   quality="high"   bgcolor="#ffffff"   width="550" 
heights"400"   name="mov"  align="middle"  allowScriptAccess="sameDomain" 
type="application/x-shockwave-flash" 
pluginspage="http://www.macromedia.com/go/getflashplayer"/> 
</object> 

Проанализировав приведенный HTML-код, обнаружим, что теги <OBJECT> и <EMBED> имеютпрактически одинаковый набор параметров и атрибутов.  Назначение большинства из них легко понять из их названия. Например, очевидно, что атрибут width должен отвечать за ширину области отображения фильма, атрибут align — за выравнивание фильма на странице, а параметр quality — за качество визуализации фильма. Большинство атрибутов и параметров чаще всего имеют одно и то же значение для большинства публикуемых фильмов. К примеру, если фильмы размещаются на одной и той же странице, то HTML-код для одного из них можно создать, просто скопировав теги <OBJECT>  и <EMBED>  другого.  Затем придется заменить значения всего четырех элементов: 
• ширина и высота фильма обычно индивидуальны, поэтому изменяем значение атрибутов width и height; 
• адрес и имя публикуемого SWF-фильма будут, естественно, другими. Поэтому заменяем величину параметра movie  и атрибута id  тега <OBJECT>,  а также значение атрибута src  тега <EMBED>. 

То, что HTML-код, отвечающий за встраивание SWF-фильмов, обычно столь мало различается у разных фильмов, заставляет задуматься, зачем вообще задавать параметры и атрибуты,  которые практически всегда имеют одно и тоже значение. Также можно долго спорить и о том, стоит ли вообще прописывать тег <EMBED>, если браузер, не поддерживающий <OBJECT>, — это архаизм, который не так уж и просто найти. Вывод же можно сделать один: HTML-код, генерируемый Flash, избыточный. Более того, ввиду наличия в нем тега <HMBED> он даже не соответствует современным стандартам.  Если использовать установки по умолчанию,  то SWF-фильм можно встроить более коротким кодом: 

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550"  
height="400"> 
<param name="movie" value="mov.swf"/> 
</object> 

Приведенный код будет хорошо работать только в браузерах от Microsoft. Если же необходимо учесть к тому же браузеры Netscape  и Opera (доля которых,  надо признать,  довольно мала),  то вместо атрибута classid следует использовать атрибут type (в нем указывается МIМЕ-тип встраиваемого файла): 

<object type="application/x-shockwave-flash" width="550" height="400"> 
<param name="movie" value="mov.swf"/> 
</object> 

По своей эффективности данный код аналогичен генерируемому Flash, если не считать редких ситуаций, когда страница открывается очень старым браузером или в системе нет Flash-плейера. На практике вполне допустимо его использовать, добавляя лишь те атрибуты или параметры, значения которых для публикуемого фильма должны отличаться от принятых по умолчанию. 
Если у пользователя не окажется плейера нужной версии или использование технологии ActiveX браузером запрещено, то SWF-фильм, естественно, не отобразится. Чтобы учесть подобные ситуации, вы должны разработать альтернативное содержимое, которое будет визуализировано на месте фильма. Описывающий его HTML-код должен быть помешен в тег <OBJECT>. Обычно альтернативное содержимое 1редставляет собой информационное сообщение (вроде «скачав Flash-плейер, вы видите замечательную заставку»)  или ссылку, заменяющую баннер или кнопку.  В случае тега <EMBED> для задания альтернативного содержимого используется атрибут alt. 
Общее количество атрибутов и параметров тегов <OBJECT>  и <EMBED>  весьма значительное. Другой вопрос, что все вместе они никогда не прописываются. Всего лишь несколько атрибутов являются обязательными. Остальные задаются лишь в том случае, если их величина должна быть отлична от значения по умолчанию. 
Вообще все параметры и атрибуты можно разделить на две группы. 
  • В первую входят те из них, которые хранят информацию,  использующуюся браузером.  Это,  например,  расположение SWF-файла, ширина и высота области, которую нужно отвести под фильм, идентификационный номерFlash-плейера и т. д.
  • Вторую группу образуют параметры и атрибуты, хранящие данные, которые передаются плейеру. К примеру, так плейер «узнает», должен ли быть фон прозрачным, следует ли использовать системные шрифты, должен ли фильм проигрываться в цикле. Атрибутов первой группы около 20. Но в случае Flash-фильмов используются не все из них. Информацию о наиболее часто применяемых атрибутах вы можете получить из табл. 16.2. 












































Ко второй группе относится несколько больше атрибутов и параметров, чем к первой. По сути они представляют собой внешние переменные, которые передаются плейеру перед началом проигрывания фильма. Будет ли такая переменная иметь форму атрибута или параметра, зависит от тега. Вслучае тега <EMBED> переменные с настройками задаются в форме атрибутов (то есть они поме-шаются непосредственно в тег). Если же прописывается тег <OBJECT>, то переменные с даннымидля плейера должны быть заданы как параметры. Для этого служит специальный тег <PARAM>. Уэтого тега имеется два атрибута: name — имя параметра и value — его значение.
Например, чтобысделать задний фон прозрачным, следует набрать

<param name="wmode" value="Transparent"/> 

Большинство атрибутов и параметров второй группы мы подробно рассмотрели,  когда изучали настройки, за которые они отвечают. Поэтому сейчас ограничимся лишь краткой их характеристикой (табл. 16.3).
















Если HTML-страница с фильмом публикуется из среды разработки Flash, то задать значения практически для всех атрибутов можно, соответствующим образом определив настройки на закладке HTML окна Publish Settings. Впрочем, HTML-код,  генерируемый по умолчанию, избыточен. Так что стоит разработать собственный шаблон публикации.  Как это сделать,  весьма обстоятельно описывается в справочной системе программы. 


16.5.2. Передача данных из HTML-окружения при загрузке фильма
Существует много способов передачи внешних данных во Flash-фильм. Выбор подхода должен определяться типом этих данных, их расположением, а также тем, когда они должны поступить в фильм. В простейшем случае данные являются текстом, хранящимся на той же НТМL-странице, импортировать который необходимо перед началом воспроизведения фильма. Оптимальный способ передачи данных такого рода связан с применением специального параметра flashvars  тега <OBJECT> (или атрибута тега <EMBED>). 
Значением тега flashvars должна быть строка, содержащая передаваемые данные в виде нужного количества пар имя-значение, разделенных амперсантом (&).
Например, если вам необходимо переслать в фильм имя посетителя, его возраст и страну проживания, то следует набрать

<param name="flashvars" value="name=Bob&age=25&location=USA"/> (тег <OBJECT>) 
flashvars="name=Bob&age=25&location=USA"     (тег <EMBED>) 

Пары имя-значение принято называть переменными. При поступлении строки с такими переменными в фильм, на их основании будут созданы настоящие переменные ActionScript и помещены на основную временную диаграмму.
Например,  проанализировав приведенный выше HTML-код, 
плейер создаст три переменные: name, age и location, которые будут хранить строки «Bob», «25» и «USA». Естественно, что переменные, получаемые от HTML-окружения, должны иметь уникальные идентификаторы.  Иначе они будут утеряны или перезаписаны при выполнении кода ActionScript. 
Используя параметр (атрибут) flashvars, в фильм можно передать до 64 Кб данных. 

В строке, присваиваемой параметру (атрибуту) flashvars, нельзя использовать пробел, некоторые знаки пунктуации (являющиеся в НТМL зарезервированными), например «<» или <« %», служебные и непечатаемые символы. Более того, если страница закодирована не в Unicode, нельзя применять символы кириллицы или любого другого национального языка. Строка может содержать только буквы из кодировки US-ASCII (первые 128 символов Unicode и большинства восьмибитовых кодировок). Для обозначения остальных символов используется запись вида %ХХ, где XX — код символа в шестнадцатеричном представлении. Например, чтобы задать пробел, нужно ввести %20, а для наклонной черты — %2F. Если используется кодировка Unicode, то символы, код которых больше 255, задаются записью %ХХ %YY. К примеру, кирилличная «а» запишется как %D0 %B0.  Одиночный пробел можно задать символом «+».  Подобные правила были выработаны нараннем этапе развития Интернета для однозначности трактовки URL на разных машинах. Поэтому о строке, записанной исходя из них, говорят, что она подверглась URL-кодированию
Вы должны строго следовать правилам URL-кодирования, задавая значение параметра (атрибута)  flashvars, иначе плейер не сможет верно интерпретировать строку с парами имя-значение. Также нужно помнить, что Flash-плейер по умолчанию использует Unicode. Это означает, что все символы, не входящие в US-ASCII, должны быть закодированы в формате Unicode (HTML-страницы до сих пор чаще всего кодируются в одной из восьмибитовых кодировок). 
Например, посмотрим, как плейер трактует следующую строку с данными: 

<раram name="flashvars" value="text=Bceм привет!"/> 

Попробуем трассировать значение переменной text,  которая должна быть создана на основной временной диаграмме фильма: 

trace(text); // Выводит: 6ЯЕЛ ОПХБЕР! 

Увидев подобную строку в браузере, вы, вероятно, попытались бы изменить кодировку. Но в нашем случае такая операция бессмысленна. Чтобы текст отобразился верно, его нужно подвергнуть URL-кодированию; 

<param name="flashvars" value= "text=%D0%92%Dl%81%D0%B5%D0%BC%20%D0%BF%D1%80%DO%B8%DO%B2%DO%B5%D1%82%21"/> 

Проверяем значение переменной: 
trace(text); // Выводит: Всем привет! 

На практике URL-кодирование редко проводится «вручную», В любой среде разработки, хотя бы чуть более совершенной,  чем  «Блокнот»,  для этого имеются специальные инструменты.  В ActionScript и JavaScript провести URL-кодирование позволяет функция escape()

trace(escape("Привет")); // Выводит: %DO%9F%D1%30%DO%B8%DO%32%DO%B5%D1%82 

При необходимости строку можно и декодировать, для чего предназначена функция unescape()
trace(unescaper("%D0%9F*D1%80%D0%B8%D0%B2%D0%B5%D1%82"); // Выводит: Привет

Еще один способ передать фильму данные из HTML-окружения заключается в использовании метода GET. При таком подходе переменные передаются в виде части URL, исходя из которого происходит импортирование фильма. Строка с переменными отделяется от основного URL символом «?». 
Как вы помните, в случае тега <OBJECT> указатель на SWF-файл хранит параметр movie, Следовательно, чтобы передать данные при помощи метода GET, нужно набрать приблизительно следующий код: 

<param name="movie" value="mov.swf?name=Bob&age=25&location=USA"/> 

В теге <EMBED> за расположение SWF-файла отвечает атрибут src: 
src="mov.swf?name=Bob&age=25&location=USA" 

Строка с парами имя-значение,  полученная плейером при помощи метода GET,  обрабатывается точно так же, как и в случае использования для ее передачи параметра (атрибута) flashvars. Однако метод GET  в силу своей природы имеет существенно больше ограничений для импортирования данных, чем flashvars:
  •  Во-первых, метод GET не позволяет переслать более 256 байтов информации (предел flashvars —64 Кб текста).
  • Во-вторых, что более существенно, при присоединении к URL новых параметров браузер будет считать,  что это ссылка на новый ресурс. Поэтому методGET  снижает эффективность применения кэшированных файлов,  что в случае  «тяжеловесных» Flash-сайтов крайне плохо. 
Кстати,  метод GET  можно использовать для передачи параметров,  если фильм импортируется функцией load.Movie() или loadMovieNum(). Это может быть полезно, если инициализация должна зависеть от контекста. 

























26 августа 2012

JavaScript: передача параметров между страницами

JavaScript

Это самоучитель по JavaScript на русском языке

забегая вперед:
к концу написания этого поста  (сопровождавшегося длительным копанием в интернете и вынесением мозга мужу-программиста) стало ясно, что это мне не html, с которым я разбираюсь по ходу процесса, и придется потратить денек-другой (оптимистка) на работу с самоучителем. пост пока что сохраню, позже придется его проверять и, возможно, править.

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

пользуюсь двумя примерами: пример 1 и пример 2, их и цитирую и разбираю


Для определения GET-параметров на JavaScript, необходимо произвести синтаксический разбор URL текущей страницы.

Структура URL - где живут параметры



в JavaScript строку с GET-параметрами можно определить так: 

window.location.search. Свойство search объектаlocation хранит часть URL, начиная с «?» до начала хеш-данных.

Пример:

Допустим, у нас есть следующий адрес:

http://web.izjum.com/some-page.html?var1=111&var2&var3=ttt#someHashData,

тогда window.location.search вернёт нам:

?var1=111&var2&var3=ttt



 скрипт (из примера2)

function getParam(sParamName){
    var Params = location.search.substring(1).split("&"); // отсекаем «?» и вносим переменные и их значения в массив
    var variable = "";
    for (var i = 0; i < Params.length; i++){ // пробегаем весь массив
        if (Params[i].split("=")[0] == sParamName){ // если это искомая переменная — бинго!
            if (Params[i].split("=").length > 1) variable = Params[i].split("=")[1]; // если значение параметра задано, то возвращаем его
            return variable;
        }
    }
    return "";
}


все, что отделено "//- комментарии

задаем функцию:  function getParam(sParamName)имя getParam аргумент (sParamName)

переменная Params 
         объект location (тыц) содержит информацию о текущем URL
                        свойство search объекта location выбирает часть URL после "?" (включительно)
             метод substring(1) (тыц) в данном случае отсекает "?"
                                 метод split("&") (тыц) разделяет полученную строку на массив (тыц), состоящий из кусочков, разделенных  "&"

переменная variable 

цикл for
       присваиваем переменной i значение 0
                цикл будет выполняться, пока переменная < Params.length т.е. меньше количества элементов массива (переменная  Params - наш массив, свойство  length  -  кол-во элементов массива).
               i++ означает i +1. после того, как проделаны все необходимые действия для i, присваиваем ему значение i +1 и продолжаем цикл.
               
                if (Params[i].split("=")[0] == sParamName)
               если        
                       (Params[i]: содержимое ячейки [i] переменной-массива Params 
                     split("="):разделяем на новый массив по знаку "=" (получается массив, состоящий из 2-х элементов: до знака и после знака)

                                                                         [0] - первая ячейка нового массива
                                                                                == если равно
                                                                                      sParamName)

             тогда переходим к следующей строке:
             
            if (Params[i].split("=").length > 1) variable = Params[i].split("=")[1]; 
            return variable;
        }            если количество ( length ) элементов массива, полученного после разделения (split("=")содержимого ячейки номер [i]  переменной-массива  Params   больше 1 ,
                           то
                               переменная variable будет = содержимому второй ячейки нашего нового массива: Params[i].split("=")[1]
            в этом случае на выход (туда, откуда наша функция вызывается) пойдет (вернется) это значение: return variable

в противном случае, т.е. если наши "if" не выполняются,  на возврат пойдет пустая строка : return ""