2012-12-10 13 views
6

Proprio come nel titolo.Carica un file javascript e un file css in base al programma utente

Ho due file: uno è un file javascript e uno è un file css. E se user-agent è un iPad voglio caricare quei file - ma solo quando user-agent è iPad. Quindi sotto due righe vengono caricate solo quando user-agent è un iPad. come posso ottenere che

<link rel="stylesheet" href="/c/dropkick.css" type="text/css"/> 
<script src="/s/jquery.dropkick-1.0.0.js" type="text/javascript"></script> 

risposta

10
if (navigator.userAgent.match(/iPad/i) != null){ // may need changing? 
    var js = document.createElement('script'); 
    js.type = "text/javascript"; 
    js.src = "/s/jquery.dropkick-1.0.0.js"; 

    var css = document.createElement('link'); 
    css.type = "text/css"; 
    css.rel = "stylesheet"; 
    css.href = "/c/dropkick.css"; 

    var h = document.getElementsByTagName('head')[0]; 
    h.appendChild(js); 
    h.appendChild(css); 
} 

O qualunque sarebbe nella User-Agent intestazione per un iPad.

Riferimenti:

+1

Io uso sempre 'navigator.userAgent.match (/ iPad/i)! = Null' per rilevare l'iPad –

+0

@barts: Notato, grazie per l'informazione. Aggiornerò la mia risposta per riflettere. –

+0

Grazie ragazzi per la risposta completa. Questo mi ha davvero aiutato :) – born2fr4g

2

È possibile utilizzare document.createElement per creare link e script elementi, e poi aggiungerli al documento (per esempio, li aggiunge alla document.getElementsByTagName('head')[0] o simili).

This answer qui su SO suggerisce che è possibile selezionare un iPad semplicemente cercando la stringa "ipad" nel campo navigator.userAgent. Naturalmente, il campo del programma utente può essere falsificato.

Così, per esempio:

<script> 
(function() { 
    var elm, head; 

    if (navigator.userAgent.indexOf("ipad") !== -1) { 
     head = document.getElementsByTagName('head')[0] || document.body || document.documentElement; 

     elm = document.createElement('link'); 
     elm.rel = "stylesheet"; 
     elm.href = "/c/dropkick.css"; 
     head.appendChild(elm); 

     elm = document.createElement('script'); 
     elm.src = "/s/jquery.dropkick-1.0.0.js"; 
     head.appendChild(elm); 
    } 
})(); 
</script> 

... ma questo è off-the-bracciale, non testati.

(Si noti che non c'è ragione di mettere il tipo su entrambi link o script,., Nel caso di link, il tipo viene dal tipo di contenuto della risposta Nel caso di script, il valore predefinito è JavaScript.)

+0

Anche se sono d'accordo che non _need_ specificare tipo, vengo schizzi dai vecchi tempi di 'foo.png 'contenente' Content-Type: text/javascript' nell'intestazione. Credo che mi sento esplicito più sicuro che implicito in molti casi. –

+0

@BradChristie: Giusto, ma 'type' su' link' quando c'è un 'rel =" foglio di stile "' non è esplicito, è un no-op, vedi [qui] (http://www.w3.org/ TR/html5/the-link-element.html # attr-link-type) e [qui] (http://www.w3.org/TR/html5/links.html#link-type-stylesheet). Allo stesso modo su 'script', il default è e ** always ** è stato JavaScript, anche su IE5 quando Microsoft pensava di poter competere usando VBScript. :-) –

Problemi correlati