Jak się używa wtyczek
Wtyczki oferują szeroką gamę właściwości zwiększającą elastyczność przeglądarek bazujących na Gecko. Poniższe typy wtyczek są aktualnie dostępne:
- przeglądarki multimedialne jak Adobe Flash czy Adobe Acrobat
- usługi jak osadzanie obiektów czy kompresja/dekompresja
- aplikacje począwszy od osobistych wiadomości, a skończywszy na grach
Zakres możliwości dotyczący wtyczek wydaje się nieskończony, na co wskazuje zwiększająca się liczba niezależnych producentów oprogramowania tworzących coraz to nowe, innowacyjne wtyczki.
Za pomocą interfejsu programowania wtyczek można stworzyć dynamicznie ładowalne wtyczki potrafiące:
- rejestrować jeden lub więcej typów MIME
- rysować wewnątrz okna przeglądarki
- pobierać zdarzenia myszki lub klawiatury
- pobierać dane z sieci za pomocą adresów URL
- wysyłać dane do adresów URL
- dodawać odnośniki lub hotspoty linkujące nowe adresy URL
- rysować wewnątrz sekcji na stronie HTML
- komunikować się z JavaScriptem/DOM-em za pomocą natywnego kodu
Można dowiedzieć się jakie wtyczki są zainstalowane w systemie oraz poprawnie skojarzone z przeglądarką poprzez przejrzenie strony "O wtyczkach". Przejdź do menu Pomoc, kliknij je a następnie wybierz "O wtyczkach" Napisz "about:plugins" w pasku adresu. Strona "O wtyczkach" przedstawia listę zainstalowanych wtyczek wraz z ich typem MIME, opisem, rozszerzeniami plików oraz aktualnym statusem (włączona lub wyłączona) dla każdego z typu MIME skojarzonego z wtyczką. Zauważ w zakładce "Pokaż źródło strony", że jest to po prostu informacja pobrana z JavaScriptu.
Ponieważ wtyczki są zależne od platformy musisz załadować ją w każdym systemie operacyjnym i każdym procesorze, na który została przeznaczona.
Wtyczki i aplikacje pomocnicze
Przed wtyczkami były aplikacje pomocnicze. Aplikacja pomocnicza to samodzielny program, który może być włączony z przeglądarki. Tak jak i wtyczkę przeglądarka odpala aplikację pomocniczą w momencie wykrycia typu MIME, który jest z nią związany. Jednakże odmiennie od wtyczki, aplikacja pomocnicza wykonuje się niezależnie od przeglądarki i nie współdziała z nią lub siecią.
Po wykryciu przez przeglądarkę typu MIME szuka ona zawsze najpierw zarejestrowanych wtyczek. W przypadku niewykrycia wtyczek poszukuje aplikacji pomocniczych zgodnych z typem MIME.
Wtyczki i aplikacje pomocnicze pokrywają różne potrzeby aplikacji. Jeśli chcesz wiedzieć więcej o aplikacjach pomocniczych przejrzyj pomoc online firmy Netscape.
Jak działają wtyczki
Cykl życia wtyczki, odmiennie od aplikacji, jest całkowicie kontrolowany przez stronę odwołującą się do wtyczki. Ta sekcja sposób w jaki działają wtyczki w przeglądarce.
Podczas startu Gecko sprawdzane są moduły wtyczek w w odpowiednich katalogach systemu. By dowiedzieć się gdzie Gecko szuka modułów wtyczek zobacz Jak Gecko znajduje wtyczki.
Kiedy otwierana jest nowa strona zawierająca osadzone dane typu odwołującego się do wtyczek, przeglądarka wykonywuje następującą sekwencję:
- sprawdza, czy istnieje wtyczka o pasującym typie MIME
- ładuje kod wtyczki do pamięci
- inicjalizuje wtyczkę
- tworzy nową instancję wtyczki
Gecko może ładować w tym samym czasie wielokrotne instancje tej samej wtyczki na jednej stronie, lub w kilku osobnych oknach. Jeśli przeglądasz stronę zawierającą przykładowo kilka klipów Real Audio, przeglądarka stworzy tyle instancji wtyczki Real Audio ile jest wymagane (jednakże odgrywanie kilku plików real audio w tym samym czasie nie jest najlepszym pomysłem). Po opuszczeniu strony lub zamknięciu okna instancja wtyczki ulega usunięciu. Po usunięciu ostatniej instancji wtyczka jest usuwana z pamięci. Wtyczka nie zajmuje innych zasobów poza miejscem na dysku, gdy nie jest załadowana. Następna sekcja Zrozumienie modelu uruchamiania opisuje powyższe etapy bardziej szczegółowo.
Zrozumienie modelu uruchamiania
Wtyczki są modułami dynamicznego kodu skojarzonymi z jednym, lub kilkoma typami MIME. Podczas startu przeglądarki następuje wyliczenie dostępnych wtyczek (ten krok jest zależny od platformy), odczyt zasobów z każdego pliku wtyczki w celu ustalenia dla niej typów MIME oraz rejestracja każdej biblioteki wtyczki dla jej typów MIME.
Poniższe etapy opisują cykl życia wtyczki od załadunku do usunięcia:
- Po wykryciu przez Gecko typu MIME danych zarejestrowanych dla wtyczki (osadzonych na stronie HTML, lub w osobnym pliku) dynamicznie ładuje ją do pamięci, o ile oczywiście nie była załadowana uprzednio, a następnie tworzy dla wtyczki nową instancję.
- Gecko wywołuje funkcję wtyczki NP_Initialize, gdy kod wtyczki jest ładowany po raz pierwszy. Przestrzegając konwencji wszystkie funkcje związane z wtyczką posiadają przedrostek "NPP", a funkcje związane z przeglądarką przedrostek "NPN".
Uwaga: NP_Initialize
oraz NP_Shutdown
nie są technicznie częścią tablicy funkcji przekazywanej przez wtyczkę przeglądarce. Przeglądarka wywołuje je podczas ładowania oraz zwalniania wtyczki. Funkcje te są eksportowane z bibliotek DLL wtyczki. Dostęp do nich uzyskuje się poprzez przeglądnięcie tablicy systemowej. Oznacza to, że nie są one związane z danym wywołaniem wtyczki. By dowiedzieć się więcej o funkcjach zobacz Inicjacja i niszczenie.
- Przeglądarka wywołuje funkcję wtyczki NPP_New podczas tworzenia instancji. Wielokrotne instancje tej samej wtyczki mogą istnieć gdy (a) istnieje wiele osadzonych obiektów na stronie, lub (b) kilka okien przeglądarki jest otwartych wyświetlając dane tego samego typu.
- Instancja wtyczki jest usuwana, gdy użytkownik opuszcza stronę, lub zamyka okno; Gecko wywołuje funkcję NPP_Destroy, aby poinformować wtyczkę o usunięciu instancji.
- Po usunięciu ostatniej instancji wtyczka jest usuwana z pamięci. Gecko wywołuje funkcję NP_Shutdown. Wtyczka nie zajmuje innych zasobów niż miejsce na dysku twardym, gdy nie jest załadowana.
Uwaga: Wywołania API oraz odpowiedzi wtyczki wykorzystują główny wątek nawigacji. Ogólnie jeśli chcesz, aby wtyczka generowała dodatkowe wątki do obsługi jakiegokolwiek etapu swojego użycia należy być ostrożnym w izolowaniu wywołań API wtyczki.
By dowiedzieć się więcej o metodach zobacz Inicjacja i niszczenie.
Wykrywanie wtyczek
Gecko poszukuje wtyczek w różnych miejscach i określonym porządku. Następna sekcja Jak Gecko znajduje wtyczki opisuje te reguły, a kolejna sekcja Sprawdzanie wtyczek za pomocą typu MIME opisuje jak można użyć JavaScriptu do zlokalizowania wtyczki oraz ustalenia, które należy zarejestrować dla ich typów MIME.
Jak Gecko znajduje wtyczki
Podczas startu przeglądarki bazującej na Gecko w systemach Windows lub Unix sprawdzane są moduły wtyczek w ścieżce wskazanej przez MOZ_PLUGIN_PATH
. Następnie sprawdzane są katalog wtyczek dla platformy:
- MS Windows: Podkatalog
plugins
w katalogu głównym przeglądarki. - Mac OS X: Wtyczki są ładowane wraz z paczką aplikacji z poniższych lokalizacji:
BUNDLE/Contents/Plug-Ins
orazBUNDLE/Contents/MacOS/plugins
. Przeglądarka przeszukuje również~/Library/Internet Plugins
a następnie/Library/Internet Plugins
. Wewnątrz tychże katalogów wtyczki są szeregowane wg daty. - Unix:
usr/local/lib/netscape/plugins
lub$HOME/.mozilla/plugins
. Jeśli chcesz używać innego katalogu ustaw zmienną środowiskowąMOZ_PLUGIN_PATH
na jego ścieżkę np. $HOME/yourplugins:/usr/local/lib/netscape/plugins. Gecko poszukuje katalogu wyspecyfikowanego przez tą zmienną. Ustawienia lokalne użytkownika nadpisują ustawienia sieciowe.
Na wszystkich platformach podkatalog lub folder plug-ins
musi znajdować się w katalogu głównym przeglądarki. Użytkownicy mogą instalować wtyczki w tym katalogu, bądź ręcznie używając binarnego programu instalacyjnego, bądź też XPInstall w celu napisania skryptu instalacyjnego używanego przez przeglądarkę. Zainteresowanych odsyłam artykułu Instalowanie wtyczek.
By dowiedzieć się jakie wtyczki są już zainstalowane wybierz about:plugins w przeglądarce. Gecko wyświetli listę zainstalowanych wtyczek oraz ich typy MIME, jak również dodatkowe informacje dostarczoną wraz z wtyczką.
W Windows zainstalowane wtyczki są automatycznie konfigurowane, by obsługiwać wspierane przez nie typy MIME. Jeśli wiele wtyczek wspiera ten sam typ MIME to pierwsza zarejestrowana wtyczka dany typ MIME. Zobacz również Rejestrowanie wtyczek.
Sprawdzanie wtyczek za pomocą typu MIME
Własność enabledPlugin
w JavaScripcie może być użyta do określenia, która wtyczka jest skonfigurowana dla danego typu MIME. Pomimo że wtyczka może wspomagać wiele typów MIME, lub jeden typ MIME może być wspierany przez wiele wtyczek, tylko jedna wtyczka może być skonfigurowana dla danego typu MIME. Własność enabledPlugin
odnosi się do obiektu Plugin reprezentującego wtyczkę skonfigurowaną dla danego typu MIME.
Możesz potrzebować wiedzy, która wtyczka jest skonfigurowana dla typu MIME, by na przykład dynamicznie stworzyć element object
na stronie, jeśli użytkownik posiada wtyczkę skonfigurowaną dla typu MIME.
Poniższy przykład używa JavaScriptu w celu określenia czy wtyczka Adobe Flash została zainstalowana. Jeśli tak jest zostanie wyświetlony film.
// Można wyświetlać filmy Adobe Flash? var mimetype = navigator.mimeTypes["application/x-shockwave-flash"]; if (mimetype) { // Tak, ale czy można go wyświetlić? var plugin = mimetype.enabledPlugin; if (plugin) { // Tak, wyświetl film document.writeln("Wyświetlam: <object data='mymovie.swf' height='100' width='100'></object>"); } else { // Nie, podaj odnośnik do danych document.writeln("<a href='mymovie.swf'>Kliknij tutaj</A> by zobaczyć film."); } } else { // Nie, powiadom użytkownika document.writeln("Przepraszamy, nie można wyświetlić filmu."); }
Przegląd struktury wtyczek
W poniższej sekcji przedstawiony zostanie przegląd podstawowych informacji jakich potrzebujesz, by stworzyć wtyczkę.
Zrozumienie API wtyczki
Wtyczka jest kodem biblioteki własnej, której źródło odpowiada standardowej składni C. Interfejs programowania aplikacji (API) wtyczki składa się z 2 grup funkcyjnych oraz wspólnej struktury danych.
- Metody wtyczki są funkcjami, które implementujesz we wtyczce; Gecko wywołuje te wtyczki. Nazwy wszystkich funkcji wtyczek w API rozpoczynają się od
NPP_
, przykładowoNPP_New
. Istnieje również kilka funkcji (tj.NP_Initialize
orazNP_Shutdown
), które są bezpośrednimi punktami dostępowymi biblioteki i nie są one związane z żadnymi instancjami wtyczki. - Metody przeglądarki są funkcjami zaimplementowanymi przez Gecko; wtyczka wywołuje te funkcje. Nazwy wszystkich funkcji przeglądarki w API rozpoczynają się od
NPN_
, przykładowoNPN_Write
. - Struktury danych typów zależnych od wtyczki są zdefiniowane w API wtyczki. Nazwy struktur rozpoczynają się od
NP
, przykładowoNPWindow
.
Wszystkie nazwy wtyczek w API rozpoczynają się od NP
. Ogólnie wszystkie operacje na funkcjach API na wszystkich platformach są takie same. Różnice - jeśli istnieją - są opisywane w odnośnikach do funkcji.
Wtyczki a niezależność od platformy
Wtyczka jest dynamicznym modułem kodu właściwym danej platformie, na której jest uruchomiona przeglądarka. Jest bardziej biblioteką kodu, niż aplikacją bądź apletem i wykonuje się tylko w przeglądarce. Pomimo że wtyczki są zależne od platformy API wtyczki zaprojektowane jest w celu umożliwienia maksymalnej elastyczności i działać zgodnie na wszystkich platformach. Poniższy akapit prezentuje różnice w kodowaniu dla platform MS Windows, Mac OS X, and Unix.
Możesz użyć API wtyczki do pisania wtyczek zależnych od mediów, które dostarczyłyby wysokiej wydajności poprzez użycie kodu własnego. Wtyczki umożliwiają bezproblemowe zintegrowanie kodu zależnego od platformy by rozszerzyć podstawową funkcjonalność Gecko dostarczając wsparcie dla nowych typów danych.
Typ plików wtyczki zależy od platformy:
- MS Windows: pliki .DLL (Dynamic Link Library)
- Unix: pliki .SO lub .DSO (Shared Objects)
- Mac OS X:PPC/x86/Universal ładowalna paczka Mach-O.
Wtyczki posiadające okna i nieposiadające okna
Można pisać wtyczki posiadające, lub nie posiadające własnego okna, bądź też ramki na stronie. Używanie wtyczek nie posiadających okna rozszerzają możliwości strony oraz jej funkcjonalność. Zauważ jednakże, że generalnie wtyczki posiadają okna, gdyż prościej jest je rozwijać i są stabilniejsze podczas użycia.
- Wtyczka posiadającą okno jest rysowana właśnie w nim na stronie. Wtyczki te są nieprzeźroczyste i umieszczane w górnej sekcji HTML na stronie.
- Wtyczka nie posiadająca okna nie musi być rysowana we własnym oknie ponieważ jest rysowana w swoim własnym miejscu docelowym. Wtyczki te są przezroczyste, bądź nie i można sie do nich odwołać z sekcji HTML.
Czy wtyczka posiada okno czy nie zależy od sposobu jej definicji.
Sposób w jaki wtyczka zostanie wyświetlona na stronie jest zdeterminowany przez element HTML, który ją wywołuje. Zależy to od autora. Zależnie od elementu oraz jego atrybutów wtyczka może być widoczna, bądź ukryta, pokazywana jako cześć strony, albo w osobnym oknie. Strona WWW może wyświetlić wtyczkę posiadającą i nieposiadającą okna; jednakże musi być ona widoczna dla swojego typu okna, by była brana pod uwagę. Jeśli chcesz dowiedzieć sie więcej w jaki sposób HTML określa tryb wyświetlania wtyczki zobacz Używanie HTML-a do wyświetlania wtyczek
Domyślna wtyczka
W przypadku gdy dana wtyczka nie jest zarejestrowana by obsługiwać typ danych opisanych w HTML-u, Gecko odwołuje sie do wtyczki domyślnej, by pomoc użytkownikom znaleźć i zainstalować odpowiednia wtyczkę dla tego typu MIME.
Niebieska ikonka ukazuje się w oknie wtyczki na stronie HTML w momencie, gdy ładowana jest wtyczka domyślna i oznacza brakujące elementy potrzebne do wyświetlenia lub odegrania danego typu danych.
Od sposobu kodowania znacznika HTML wtyczki zależy jaka akcja zostanie podjęta po kliknięciu na powyższą ikonę. Jeśli przeglądarka nie potrafi obsłużyć danego typu MIME domyślna wtyczka sprawdza czy istnieje wtyczka, do której odnosi się element object
określający dane. Jeśli istnieje, domyślna wtyczka powiadamia użytkownika o możliwości ściągnięcia wtyczki z określonej lokalizacji. W przeciwnym wypadku domyślna wtyczka przeszukuje elementy podrzędne tj. inny element object
mogące dostarczyć bardziej szczegółowych informacji odnośnie sposobu obsługi tego typu danych.
Używanie HTML-a do wyświetlania wtyczek
W momencie, gdy użytkownik wejdzie na stronę odwołująca sie do wtyczki, to sposób w jaki ona zostanie pokazana (lub też nie) zależny jest od 2 czynników:
- Od sposobu w jaki programista napisze daną wtyczkę zależy, czy będzie ona posiadała okno, czy tez nie.
- Od sposobu w jaki elementy HTML wywołują daną wtyczkę zależy jak będzie ona wyświetlona: czy będzie osadzona wewnątrz strony bądź sekcji, czy też pojawi się na osobnej stronie, bądź będzie ukryta.
Poniższa sekcja opisuje sposoby użycia elementów HTML oraz tryby wyświetlania wtyczek. W celu uzyskania dokładniejszych informacji odnośnie wtyczek posiadających i nieposiadających okien zobacz sekcje Wtyczki posiadające okna i nieposiadające okna.
By dowiedzieć sie więcej o trybach wyświetlania oraz o sposobie wykorzystania elementów HTML zobacz sekcje Opcje wyświetlania wtyczek. Aby poznać poszczególne znaczniki HTML oraz ich atrybuty zobacz:
Tryby wyświetlania wtyczek
Gdy piszesz stronę HTML dla umieszczenia w niej wtyczki, lub wtyczkę dla autorów stron musisz rozumieć jak tryby wyświetlania wpłyną na prezentację wtyczki.
Każda wtyczka, niezależnie od tego czy posiada okno, czy też nie, może być prezentowana w poniższy sposób:
- osadzona na stronie i widoczna
- osadzona na stronie i ukryta
- wyświetlana jako pełna strona w osobnym oknie
Wtyczka osadzona jest częścią większego dokumentu HTML i jest ładowana podczas wyświetlania strony. Jest ona widoczna jako prostokątną część strony (jeśli nie jest ukryta). Osadzone wtyczki są często wykorzystywane do pokazywania animacji związanych z tekstem na stronie tj. Adobe Flash. Gdy Gecko wykryje w dokumencie elementu object
lub embed
stara się znaleźć i wyświetlić plik reprezentowany odpowiednio przez atrybuty data
oraz src
. Atrybuty height
oraz width
elementu object
określają rozmiar osadzonej wtyczki. Przykładowo element object
wywołuje wtyczkę wyświetlającą klip wideo:
<object data="newave.avi" type="video/avi" width="320" height="200" autostart="true" loop="true"> </object>
Wtyczka ukryta jest typem wtyczki osadzonej nie rysowanej na ekranie po wywołaniu. Jest tworzona za pomocą atrybutu hidden
elementu embed
. Poniżej przedstawiamy przykład:
<embed src="audiplay.aiff" type="audio/x-aiff" hidden="true">
UWAGA: Dla atrybutu hidden
nie ma znaczenia czy wtyczka posiada okno czy nie.
Można również stworzyć ukrytą wtyczkę wykorzystując element object
. Pomimo, że element object
nie posiada atrybutu hidden
można stworzyć regułę CSS nadpisującą atrybuty rozmiaru elementu OBJECT
.
object { visibility: visible; } object.hiddenObject { visibility: hidden ! important; width: 0px ! important; height: 0px ! important; margin: 0px ! important; padding: 0px ! important; border-style: none ! important; border-width: 0px ! important; max-width: 0px ! important; max-height: 0px ! important; }
W tym przypadku element object
pobierający te specjalne definicje stylów będzie posiadał klasę ukrytą. Używając atrybutu class
oraz powyższego bloku CSS można symulować działanie wtyczki ukrytej w elemencie embed
:
<object data="audiplay.aiff" type="audio/x-aiff" class="hiddenObject"></object>
Wtyczka stronicowa jest widoczna wtyczka nie będącą częścią strony HTML. Serwer przeszukuje typy mediów (MIME) przez nią zarejestrowanych, bazując na rozszerzeniu pliku, a następnie rozpoczyna przesył pliku do przeglądarki. Gecko sprawdza typ MIME i ląduje odpowiednia wtyczkę jeśli ja odnajdzie. Te typ wtyczki wypełnia w całości stronę przeglądarki. Wtyczki stronicowe są przeważnie używane jako przeglądarki dokumentów tj. Adobe Acrobat.
UWAGA: Przeglądarka nie wyświetla automatycznie paska przewijania dla wtyczek stronicowych. Wtyczka ta musi sama wyrysować pasek przewijania jeśli go potrzebuje.
Interfejs użytkownika przeglądarki pozostaje przeważnie stały niezależnie jaki typ wtyczki jest wyświetlany. Część okna aplikacji niewyświetlającego danych wtyczki nie zmienia się. Podstawowe funkcje przeglądarki tj. nawigacja, historia, otwieranie plików są używane na wszystkich stronach niezależnie od używanych wtyczek.
Używanie elementu object
do wyświetlania wtyczek
Element object
jest częścią specyfikacji HTML-a używaną do włączania do strony mediów specjalnych. Osadza gamę typów obiektów na stronie HTML włączając w to wtyczki, komponenty Javy, kontrolki ActiveX, aplety oraz obrazy. Atrybuty elementu object
określają typ obiektu do osadzenia, typ oraz lokalizację kodu implementacji obiektu oraz typ i implementacje danych obiektu.
Wtyczki zostały zaprojektowane pierwotnie do współpracy z elementem embed
, a nie elementem object
(zobacz sekcję Używanie elemntu embed do wyświetlania wtyczek), ale element object
dostarcza większej elastyczności. Zaznaczyć należy, że element object
pozwala wywoływać inny obiekt jeśli przeglądarka nie wspomaga obiektu wywołanego przez znacznik. Natomiast element embed
na to nie pozwala.
Element object
jest również częścią standardu HTML W3C.
W przeciwieństwie do elementu applet
element object
może posiadać inne elementy HTML-a włącznie z innymi elementami object
zagnieżdżonymi pomiędzy zamykającymi je znacznikami. Przykładowo, Gecko nie wspiera atrybutu classid
elementu object
używanego przez klasy Javy oraz wtyczki ActiveX osadzone na stronach - element object
może zostać zagnieżdżony w celu wsparcia rożnych implementacji wtyczki.
Zobacz również stronę projektu Mozilla ActiveX w poniższej sekcji Dokumentacja wtyczek, by dowiedzieć się więcej na temat osadzania we wtyczkach kontrolek ActiveX lub osadzania wtyczek w aplikacjach ActiveX.
Poniższy przykład demonstruje użycie zagnieżdżonych elementów object
z zaznaczeniami podobnymi do włącznie z dziećmi nadrzędnego elementu object
.
Przykład 1: Zagnieżdżanie elementów object
<html> <head> <title>Przykład 1: Zagnieżdżanie elementów object</title> <style type="text/css"> .myPlugin { width: 470px; height: 231px; } </style> </head> <body><p> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,30,0" class="myPlugin"> <param name="movie" value="foo.swf"/> <param name="quality" value="high"/> <param name="salign" value="tl"/> <param name="menu" value="0"/> <object data="foo_movie.swf" type="application/x-shockwave-flash" class="myPlugin"/> <param name="quality" value="high"/> <param name="salign" value="tl"/> <param name="menu" value="0"/> <object type="*" class="myPlugin"> <param name="pluginspage" value="https://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"/> </object> </object> </object> </p></body> </html>
Zewnętrzny element object
definiuje classid
; pierwszy zagnieżdżony object
używa wartości type
application/x-shockwave-flash
do załadowania wtyczki Adobe Flash, a najgłębiej zagnieżdżony object
wywołuje stronę do operacji ściągnięcia przez użytkownika wymaganej wtyczki, której jeszcze nie posiada. Zagnieżdżanie jest stosunkowo typowa operacja na elementach object
i pozwala uniknąć "grzebania" w kodzie innej przeglądarki.
Zasady zagnieżdżania elementów HTML
Zasady poruszania się w głąb zagnieżdżonych elementów object
oraz embed
są następujące:
- Przeglądarka sprawdza typ MIME pierwszego elementu. Jeśli wie jak obsługiwać dany typ (poprzez załadowanie wtyczki zarejestrowanej dla niego) to czyni to.
- W przeciwnym wypadku sprawdza wskaźnik zawarty w tym elemencie, by dowiedzieć się jakie wtyczki mogą obsługiwać dany typ MIME. Następnie pobiera żądaną wtyczkę.
- Jeśli typ MIME jest nieznany i brak jest referencji odnośnie wtyczki, która może zostać użyta, przeglądarka przesuwa się do kolejnego podrzędnego elementu i powtarza całą operacje.
Pozostałą część tejże sekcji stanowi krótkie wprowadzenie do elementów HTML. Jeśli chcesz dowiedzieć się więcej o elemencie object
oraz innych odwiedź stronę: Specyfikacja W3C HTML 4.01
W celu osadzenia rożnych typów obiektów na stronie HTML użyj elementu OBJECT
.
<object classid="classFile" data="dataLocation" codebase="classFileDir" type="MIMEtype" align="alignment" height="pixHeight" width="pixWidth" id="name" > ... </object>
Pierwszym zbiorem atrybutów elementu object
są adresy URL.
classid
jest adresemURL
danego obiektu implementacji. Jest on podobny do atrybutucode
elementuapplet
. Ponieważ Gecko nie wspiera tego atrybutuobject
możesz zagnieździć elementyobject
posiadające rożne atrybuty, by użyć elementuobject
do osadzenia wtyczki w jakiejkolwiek przeglądarce (zobacz przykład powyżej).data
reprezentuje adresURL
danych obiektu; jest równoznaczny z atrybutemsrc
elementuembed
.codebase
reprezentuje adresURL
wtyczki; jest równoznaczny z atrybutemcodebase
elementuapplet
. Dla wtyczekcodebase
jest tym samym copluginspace
.type
reprezentuje typ MIME wtyczki; jest równoznaczny z atrybutemtype
elementuembed
.height
,width
,align
są podstawowymi atrybutamiimg/embed/applet
wspieranymi przezobject
.height
orazwidth
są wymagane przez elementyobject
do używania elementówembed
.- Jeśli wtyczka porozumiewa się z JavaScriptem użyj atrybutu
id
określającego nazwę wtyczki. Jest równoznaczny z atrybutemname
elementuapplet
orazembed
. Musi być unikalny.
Używanie odpowiednich atrybutów
Od Ciebie zależy, czy dostarczysz odpowiednią ilość atrybutów i czy nie będą one tworzyły wzajemnych konfliktów; przykładowo wartość width
i height
może być zła dla wtyczki. W tym przypadku wtyczka nie może zostać osadzona.
Gecko interpretuje atrybuty następująco: kiedy przeglądarka wykryje element object
przegląda jego atrybuty odpowiednio je wstawiając lub ignorując. Analizuje atrybuty w celu określenia typu obiektu oraz czy przeglądarką jest w stanie obsłużyć tenże typ.
- Jeśli przeglądarka potrafi obsłużyć dany typ tj. istnieje dla niego odpowiednia wtyczka - wtedy wszystkie elementy oraz atrybuty aż do zamykającego elementu
</object>
są filtrowane (oprócz elementówparam
oraz innych elementówobject
). - Jeśli przeglądarka nie potrafi obsłużyć lub ustalić typu to nie może osadzić obiektu. Wtedy HTML jest analizowany jak zwykły.
Używanie elementu embed
do wyświetlania wtyczek
Wtyczka wykonuje się na stronie HTML w oknie przeglądarki. Autor strony używa elementu embed
do wywołania wtyczki oraz jej kontroli. Preferowanym sposobem wywołania wtyczki jest użycie elementu object
(zobacz sekcję Używanie elementu object do wyświetlania wtyczek), natomiast element embed
może zostać użyty dla zgodności wstecznej z przeglądarkami Netscape 4.x oraz w przypadkach, gdy chcesz powiadomić użytkownika o potrzebie zainstalowania wtyczki - ponieważ wtyczka domyślna jest wywoływana automatycznie za pomocą elementu embed
.
Gecko ładuje osadzoną wtyczkę, gdy wyświetli stronę HTML zawierającą osadzony obiekt, którego typ MIME został zarejestrowany przez wtyczkę. Wtyczki są osadzane w ten sam sposób jak obrazki GIF lub JPEG z tym wyjątkiem, że wtyczka może reagować na zdarzenia użytkownika tj. kliknięcie myszą.
Element embed
posiada następującą składnie oraz atrybuty:
<embed src="location" type="mimetype" pluginspage="instrUrl" pluginurl="pluginUrl" align="left"|"right"|"top"|"bottom" border="borderWidth" frameborder="no" height="height" width="width" units="units" hidden="true|false" hspace="horizMargin" vspace="vertMargin" name="pluginName" palette="foreground"|"background" > ... </embed>
Musisz włączyć do elementu embed
atrybut src
, lub też type
. W przeciwnym przypadku nie można będzie określić typu medium i żadna wtyczka nie zostanie załadowana.
Atrybut src
jest adresem URL
pliku do wykonania. Atrybut type
określa typ MIME wtyczki do uruchomienia. Nawigator używa bądź wartości atrybutu type
, bądź też rozszerzenia pliku podanego jako źródłowy w celu określenia jakiej wtyczkę należy użyć.
Użyj atrybutu type
do określenia typu MIME medium koniecznego do wyświetlenia wtyczki. Dobrą praktyką jest włączenie typu MIME do wszystkich elementów HTML wtyczki. Można użyć atrybutu type
dla wtyczki nie wymagającej żadnych danych, przykładowo wtyczka, która rysuje zegar analogowy lub pobiera wszystkie dane dynamicznie. Dla wtyczki widocznej muszą być również włączone atrybuty width
oraz height
, gdy używamy atrybutu type
; nie używa się wartości domyślnych.
Atrybut pluginurl
jest adresem URL wtyczki lub XPI jeśli wtyczka jest zapisywana (zobacz również Instalowanie wtyczek w celu uzyskania szczegółowych informacji dotyczących formatu pliku XPI).
Element embed
posiada kilka atrybutów określających wygląd oraz rozmiar wywołania wtyczki, włącznie z:
- Atrybutami
border
orazframeborder
określającymi rozmiar ramki wtyczki lub rysujących wtyczkę nie posiadających ramki height
,width
orazunits
wyznaczających rozmiar wtyczki na stronie HTML. Jeśli wtyczka nie jest ukryta to atrybutyheight
iwidth
są wymagane.hspace
orazvspace
tworzących margines o określonej w pikselach szerokości wokół wtyczki.align
określa wyrównanie wtyczki względem strony.
Użyj atrybutu hidden
jeśli nie chcesz, by wtyczka była widoczna. W tym przypadku nie potrzebujesz atrybutów określających wygląd wtyczki. Atrybut hidden
przysłania te atrybuty jeśli występują.
Użyj atrybutu name
określającego nazwę wtyczki, bądź też wywołania wtyczki jeśli komunikuje się ona z JavaScriptem.
Przykładowo element embed
ładuje obrazek z typem danych dgs.
<embed src="mypic.dgs" width="320" height="200" border="25" align="right">
Gecko interpretuje atrybuty w poniższy sposób:
src
: Załadowuje plik danych oraz określa ich typ MIME.width
orazheight
: Ustalają obszar strony obsługiwany przez wtyczkę na 320 x 200 pikseli. Używaj CSS w celu kontrolowania rozmiaru oraz położenia elementów na stronie HTML.border
: Rysuje ramkę wokół wtyczki o szerokości 25 pikseli.align
: Wyrównuje wtyczkę do prawej części strony.
Poniższy przykład obrazuje zagnieżdżenie elementu embed
wewnątrz elementu object
, który jest wymagany przez przeglądarki nie wspierające elementu embed
.
Przykład 2: embed
wewnątrz object
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,30,0" width="749" height="68"> <param name="movie" value="foo.swf"> <param name="quality" value="high"> <param name="bgcolor" value="#EEEEEE"> <param name="salign" value="tl"> <param name="menu" value="0"> <embed src="foo.swf" quality="high" pluginspage="https://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="749" height="68" bgcolor="#EEEEEE" salign="tl" menu="0"> </embed> </object>
Używanie dodatkowych atrybutów elementu embed
Dodatkowo do tychże standardowych atrybutów można tworzyć prywatne właściwe tylko danej wtyczce i używać ich w atrybutach elementu embed
w celu przekazywania dodatkowych informacji pomiędzy stroną HTML a kodem wtyczki. Przeglądarka ignoruje te niestandardowe atrybuty podczas analizy kodu HTML, jednakże przekazuje je wszystkie do wtyczki umożliwiając jej sprawdzenie listy pod kątem jakichkolwiek atrybutów prywatnych mogących zmienić jej działanie.
Przykładowo wtyczka wyświetlająca klip wideo może zawierać atrybuty prywatne określające czy wystartować klip automatycznie, lub zapętlić go przy odtwarzaniu, jak zostało to przedstawione za pomocą poniższego elementu embed
:
<embed src="myavi.avi" width="100" height="125" autostart="true" loop="true">
Wraz z elementem embed
Gecko przekazuje wartości do wtyczki używając parametrów arg NPP_New
tworzącego wywołanie wtyczki.
argc = 5 argn = {"src", "width", "height", "autostart", "loop"} argv = {"movie.avi", "100", "125", "true", "true"}
Gecko interpretuje atrybuty w poniższy sposób:
src
: Załadowuje plik danych oraz określa ich typ MIME.width
orazheight
: Ustalają obszar strony obsługiwany przez wtyczkę na 100 x 125 pikseli.autostart
orazloop
: Ignoruje te atrybuty prywatne i przekazuje je do wtyczki wraz z pozostałymi.
Wtyczka musi przejrzeć swoją listę atrybutów, by określić czy wystartować klip wideo automatycznie oraz zapętlić go przy odtwarzaniu. Zauważ, że wraz z elementem object
wartości param
są również przesyłane w tej macierzy po atrybutach rozdzielonych wpisami param
.