|
Początkowo miał to być tekst
poświęcony instalacji obcych skryptów na tworzonej stronie.
Jednak po przemyśleniu postanowiłem obrócić kota ogonem i
napisać coś dla programistów.
Coraz częściej spotykam się na
różnych forach poświęconych programowaniu z takim oto
problemem. „Nie działa mi skrypt pomóżcie!” oczywiście
w przypływie altruistycznej dobroci pomagam jak mogę takim osobą,
ale ostatnio dokonałem ciekawej obserwacji.
Coraz więcej błędów w
działaniu skryptów jest spowodowane nie złym podpięciem
lecz błędem programisty. Zazwyczaj osoba tworząca skrypt JS
zakłada iż:
-
jego użytkownik zna dobrze JS.
-
Będzie wstanie „rozkminić”
kod
-
jest na tyle inteligentny że nie
będzie potrzebował dokumentacji
Wszystkie trzy założenia są błędne!
Zazwyczaj jak piszemy kod który ma być udostępniony szerszej
grupie odbiorców musimy założyć iż:
O ile drugie założenie dość łatwo
spełnić wykonując testy jednostkowe i całościowe na etapie
implementacji to pierwszy punk zazwyczaj stanowi problem.
Dobrym rozwiązaniem jest stworzenie
skryptu który będzie bardzo prosty do uruchomienia nawet w
kilku egzemplarzach na jednej stronie. Idealnym by skrypt uruchamiany
był w jednej linijce... Taki efekt jest bardzo trudny do uzyskania.
Skrypty operują zazwyczaj na obiektach DOM, lub powinny mieć różne
parametry w zależności od tego co chce uzyskać użytkownik.
Dodatkowym problemem jest zapewnienie działania skryptu na różnych
przeglądarkach.
Dobra.... nie ma rzeczy niemożliwych.
Chcąc napisać skrypt który będzie uruchamiany w jednej
linijce warto przestrzegać kilku prostych zasad:
-
pisz obiektowo! Na stronie możesz
mieć wiele takich samych obiektów tym samym możesz
uruchomić swój skrypt wiele razy na jednej stronie
-
pisz konfigurację domyślną. To
ułatwia życie. Naprawdę. Przecież wiele skryptów w
konfiguracji domyślnej zaspokaja potrzeby użytkowników.
-
Twórz metodę init() i
funkcję RunScript(). Pierwsza niech uruchamia skrypt, druga niech
pozwala na uruchomieni skryptu w ustawieniach domyślnych.
-
Twórz dokumentację... bez
komentarza
-
Postaraj się by potencjalne
wyjątki w skrypcie były, o ile to możliwe, obsługiwane w
skrypcie. Jeżeli jakaś funkcjonalność może zwrócić błąd
i nie wiesz jak go obsłużyć, zaznacz to w dokumentacji.
Przykład:
Skrypt wykrywający czy mamy do
czynienia z przeglądarką Opera i wyświetlający komunikat w
podanym elemencie DOM, lub zwracający alert:
function IsOpera(){
this.message = "To jest Opera"; //domyslny komunikat
this.target = null; //miejsce gdzie ma być pokazany komunikat
this.ALERT = "isOperaAlertConst";
var o = this;
this.init = function(){
if(o.target==null){
var t = document.createElement("div");
t.id = "isOperaTargetDIV";
document.body.appendChild(t);
}
else if(o.target == o.ALERT){
var isO = o.isOpera();
if(isO) alert(o.message);
}
else{
if(document.getElementById(o.target)!=null || document.getElementById(o.target)!="undefined"){
var isO = o.isOpera();
if(isO) document.getElementById(o.target).innerHTML = (o.message);
}
else if(o.target!= null || o.target!="undefined"){
var isO = o.isOpera();
if(isO) o.target.innerHTML = (o.message);
}
}
}
this.isOpera = function(){
var ua = navigator.userAgent.toLowerCase();
if(ua.indexOf("opera")>-1){
return true;
}
else{
return false;
}
}
}
/**
* uruchomienie w ustawieniach domyślnych
*/
function RunIsOpera(){
(new IsOpera()).init()
}
/**
* przykład uruchomienia z parametrami
*/
document.body.onload = function(){
var isO = new IsOpera();
isO.target = isO.ALERT;
isO.message = "Niestety jest to Opera";
isO.init()
}
Fajne, prawda? Użytkownik końcowy
może zatem albo napisać RunIsOpera()
i uruchomić całość w ustawieniach domyślnych, albo może
wykorzystać przykład z dołu kodu by stworzyć odpowiednią
konfigurację. No i na koniec krótka dokumentacja.
Obiekt IsOpera – służy do
wykrywania przeglądarki Opera
pola:
message
– przechowuje informację która zostanie wyświetlona
target
– przechowuje referencję do miejsca w którym ma zostać
wyświetlona informacja, może być równy stałej ALERT.
ALERT
– stała określająca czy komunikat ma pojawić się w postaci
alertu. Przypisanie jej wartości do pola target
powoduje wyświetlenie alertu
Metody:
void
init() –
uruchamia skypt
boolean
isOpera() - zwraca wartość logiczną prawda
gdy przeglądarka to opera i fałsz w przeciwnym wypadku
Warto poświęcić trochę czasu by
skrypt który publikujemy działał bezproblemowo. Godzina
więcej na testy i dokumentację to dużo zaoszczędzonego czasu na
konserwacji kodu w przyszłości oraz więcej zadowolonych
użytkowników.
|