webForumDet fria alternativet

Om inte IE: kör kod

8 svar · 1 163 visningar · startad av silfver

silfverMedlem sedan apr. 200312 679 inlägg
#1

Conditional comments verkar inte fungera runt en <script type="text/javascript">. Så hur kan jag göra så att nedanstående script endast körs om webbläsaren inte = IE?

$(document).ready(function(){
$('.rounded').corners("15px");
});
Peter SMedlem sedan dec. 20025 483 inlägg
#2

if (!document.all)
{ /* ... */ }

silfverMedlem sedan apr. 200312 679 inlägg
#3

Peter S skrev:

if (!document.all)
{ /* ... */ }

Åh, vad fint det blev. :) Hur kommer det sig att din kod inte nämner något om IE? Är det nån IE-specifik kod du skrev?

Du löste i alla fall mitt problem. Tack. :bire

nitro2k01Medlem sedan aug. 20039 342 inlägg
#4

Peter S: Dumt. Det finns andra läsare (t ex Opera) som har document.all tillgängligt för att vara kompatibla t med IE. Använd istället jQuery's egna variabel:

if(!$.browser.msie){
  $(document).ready(function(){
    $('.rounded').corners("15px");
  });
}
Peter SMedlem sedan dec. 20025 483 inlägg
#5

Hm, inte så dumt egentligen, en lite mer utökad kontroll så blir det bra :)

Tydligen använder sig jquery.browser av ua-strängen för att bestämma webbläsare, så den om någon är en no-no.

En kombination av feature-checking är det bästa, så frågan är vad corners() använder sig av som inte fungerar i IE...

Apropå feature-checking, vad säger Opera resp. IE om man gör:

if (window.opera || !document.all || !window.event)
colioneMedlem sedan juni 20014 421 inlägg
#6
if( /*@cc_on !@*/ true ) {
  $(document).ready(function(){
    $('.rounded').corners("15px");
  });
 }

Inte speciellt läsbar, men den träffar endast på IE.

Vill du få den mer läsbar kan man gör nåt sånt här:

var isIE = /*@cc_on ! @*/ true ? false : true;
if( ! isIE ) {
  $(document).ready(function(){
    $('.rounded').corners("15px");
  });
 }

RED ->
Detta kallas conditional compilation och är MSIE JScripts motsvarighet till conditional comments. Mer info:
http://msdn.microsoft.com/en-us/library/ahx1z4fs(VS.80,loband).aspx

nitro2k01Medlem sedan aug. 20039 342 inlägg
#7

Peter S skrev:

Apropå feature-checking, vad säger Opera resp. IE om man gör:

if (window.opera || !document.all || !window.event)

Villkoret är normalt sant i alla läsare. Det faller på window.event som är null när inget event-hanterare är aktiv i IE, och !null = true. Visserligen kanske window.event är ett objekt när koden körs, iom att den kallas genom window.onload, men det känns ändå lite skakigt.

if (window.opera || !document.all)

...bör räcka om man verkligen vill göra så, men jag hävdar att object detection bara bör användas på objektet man vill komma åt.
Jag gissar att skritet ifråga använder sig av läsarspecifika CSS-attribut, inte läsarspecifika Javascript-funktioner.

Edit: c vinner, som alltid.

Peter SMedlem sedan dec. 20025 483 inlägg
#8

Colione: Intressant! Tack för upplysningen :bire

Nitro: Just window.event borde man kunna skippa i detta fall och köra med ditt andra förslag. Lägger man window.event inuti ready() så fungerar det men känns...bara fel :)

silfverMedlem sedan apr. 200312 679 inlägg
#9

Okay, så vilken är bäst att använda? :D

134 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)