Podstawy

 

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 oraz BUNDLE/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ładowo NPP_New. Istnieje również kilka funkcji (tj. NP_Initialize oraz NP_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ładowo NPN_Write.
  • Struktury danych typów zależnych od wtyczki są zdefiniowane w API wtyczki. Nazwy struktur rozpoczynają się od NP, przykładowo NPWindow.

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.

image:Plugin_puzzle.gif

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="http://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="http://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 adresem URL danego obiektu implementacji. Jest on podobny do atrybutu code elementu applet. Ponieważ Gecko nie wspiera tego atrybutu object możesz zagnieździć elementy object posiadające rożne atrybuty, by użyć elementu object do osadzenia wtyczki w jakiejkolwiek przeglądarce (zobacz przykład powyżej).
  • data reprezentuje adres URL danych obiektu; jest równoznaczny z atrybutem src elementu embed.
  • codebase reprezentuje adres URL wtyczki; jest równoznaczny z atrybutem codebase elementu applet. Dla wtyczek codebase jest tym samym co pluginspace.
  • type reprezentuje typ MIME wtyczki; jest równoznaczny z atrybutem type elementu embed.
  • height, width, align są podstawowymi atrybutami img/embed/applet wspieranymi przez object. height oraz width są wymagane przez elementy object do używania elementów embed.
  • Jeśli wtyczka porozumiewa się z JavaScriptem użyj atrybutu id określającego nazwę wtyczki. Jest równoznaczny z atrybutem name elementu applet oraz embed. 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ów param oraz innych elementów object).
  • 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 oraz frameborder określającymi rozmiar ramki wtyczki lub rysujących wtyczkę nie posiadających ramki
  • height, width oraz units wyznaczających rozmiar wtyczki na stronie HTML. Jeśli wtyczka nie jest ukryta to atrybuty height i width są wymagane.
  • hspace oraz vspace 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 oraz height: 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="http://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="http://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 oraz height: Ustalają obszar strony obsługiwany przez wtyczkę na 100 x 125 pikseli.
  • autostart oraz loop: 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.

Dokumentacja wtyczek

Załączniki

Plik Wielkość Data Załączony przez
inputs2.png
4867 bajtów 2006-07-10 23:20:00 Ptak82
Plugin_puzzle.gif
2239 bajtów 2007-01-10 07:44:49 Bedi

Autorzy i etykiety dokumentu

Autorzy tej strony: Ptak82, Filemon, Bedi, Diablownik, Mgjbot
Ostatnia aktualizacja: Filemon,