2012-04-20 9 views
16

Znacznik HTML <blink> w przeglądarkach, które go obsługują (np. Mozilla Firefox i Opera), sprawia, że ​​jego zawartość miga i gaśnie, przypominając efekt wolnego światła stroboskopowego.Jak mogę sprawdzić, czy przeglądarka obsługuje tag migania?

Piszę zestaw narzędzi do pisania dla niestandardowego kodu HTML, w tym znacznika blink. Realizacja miga zachowanie jest dość prosta

(function blink(n) { 
    var blinks = document.getElementsByTagName("blink"), 
     visibility = n % 2 === 0 ? "visible" : "hidden"; 
    for (var i = 0; i < blinks.length; i++) { 
     blinks[i].style.visibility = visibility; 
    } 
    setTimeout(function() { 
     blink(n + 1); 
    }, 500); 
})(0); 

(Można see this in action)

Ale to nie wykryć czy przeglądarka obsługuje już tag blink oraz w przeglądarkach, które już obsługują go nie będzie efekt podwójnego mrugania. Potrzebuję wykrycia funkcji, która określa, czy przeglądarka obsługuje miganie, a jeśli nie, to spada na moją polyfill JavaScript.

Nie chcę przeprowadzać wykrywania w przeglądarce, ponieważ to rozwiązanie nie jest skalowalne, a ponieważ ludzie mogą wyłączyć zachowanie blink w swoich preferencjach Firefoksa, to rozwiązanie nie jest skuteczne.

Czy istnieje sposób na wykrycie wsparcia dla elementu blink?

+2

Dobre pytanie, ale nie sądziłem, że ktoś użył tego elementu. [Własne wiki wiki W3] (http://www.w3.org/wiki/HTML/Elements/blink) stwierdza: "Nie, naprawdę, nie używaj go. To po prostu zło ". Czy mogę zapytać, do czego chcesz go użyć? –

+0

@PeterOlson całkowicie rozumiem .... usunięcie mojego komentarza po ponownym przeczytaniu twojego pytania :-) – ManseUK

+5

Możesz tak po prostu zmienić to zachowanie i zastąpić element span, zachowując tę ​​samą treść. –

Odpowiedz

7

prostu nie trochę badań na ten temat i myślę mogę znaleźć odpowiedzi ...

Jestem pewien, że jesteś świadomy wykrywania nośnej właściwość CSS? Cóż, istnieje własność CSS text-decoration: blink. Więc jeśli przeglądarka obsługuje <blink>, musi obsługiwać również właściwość CSS!

To wykrywanie czyli normalne właściwość CSS wykryć textDecoration jest obsługiwany to zrobić:

if (document.createElement("detect").style.textDecoration === "") { 
    // textDecoration supported 
} 

Może spróbuj coś takiego:

if (document.createElement("detect").style.textDecoration === "blink") { 
    // textDecoration: blink supported ? 
} 

lub wzdłuż tych linii ...

Aktualizacja

Mam 4 przeglądarki & przetestowano to z 4 przeglądarkami. Z tych 4 tylko FireFox obsługuje tag migania. <blink> jest zarejestrowany w dokumencie HTML jako element "Span" w FF, ale w pozostałych 3 przeglądarkach jest zarejestrowany jako element unknown.

<html> 

<head> 
<script type="text/javascript"> 
function investigate() { 
    var blinker = document.getElementsByTagName("blink")[0]; 
    document.getElementById("monitor").innerHTML += blinker; 
} 
</script> 
</head> 

<body onload="investigate()"> 
<blink>Hello, blink!</blink> 
<div id="monitor"> </div> 
</body> 

</html> 

Wyjście

Internet Explorer [7,8,9] nieobsługiwane

Witam, miganie!
[object]

Chrome [18] nieobsługiwane

Witam, Blink!
[object HTMLUnknownElement]

Safari [5] nieobsługiwane

Witam, Blink!
[Przedmiotem HTMLElement]

FireFox [3.6] obsługiwane

Cześć, miganie!
[obiekt HTMLSpanElement]

+0

To dobry pomysł, ale wszystkie przeglądarki obsługują właściwość 'textDecoration', problem polega na tym, że nie wszystkie rozpoznają' blink' jako wartość tej właściwości. Dałeś mi kilka pomysłów do wypróbowania, chociaż ... –

+0

@PeterOlson Dodałem też inny pomysł ... – Ozzy

+0

Opera obsługuje także 'blink', ale wysyła' [obiekt HTMLElement] '. Problem polega na tym, że funkcja 'toString' dla obiektu DOM jest specyficzna dla implementacji. –

Powiązane problemy