2012-12-10 60 views
6

就像在标题中一样。根据用户代理加载JavaScript文件和css文件

我得到了两个文件:一个是javascript文件,另一个是css文件。如果用户代理是一个iPad我想加载这些文件 - 但只有当用户代理是iPad。所以下面两行仅在user-agent是iPad时加载。我怎样才能做到这一点

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

回答

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); 
} 

或者任何将在User-Agent标题为iPad。

参考文献:

+1

我总是使用'navigator.userAgent.match(/ iPad/i)!= null'来检测iPad –

+0

@barts:注意到,谢谢你提供的信息。我会更新我的答案以反映。 –

+0

谢谢各位的全面回答。这真的帮助我:) – born2fr4g

2

您可以使用document.createElement创建linkscript元素,然后将它们附加到文件(例如,它们添加到document.getElementsByTagName('head')[0]或类似)。

This answer此处SO建议您只需在navigator.userAgent字段中查找字符串"ipad"即可检测到iPad。当然,用户代理字段可能被欺骗。

因此,例如:

<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> 

...那是现成的,袖口,未经测试。

(需要注意的是,我们没有理由把类型在任linkscript;在link的情况下,该类型来自于内容类型的响应在script的情况下,默认的是JavaScript的。)

+0

虽然我同意你不_need_指定类型,我从'foo.png昔日素描'在标题中包含'Content-Type:text/javascript'。我想我觉得在许多情况下,显式比隐含更安全。 –

+0

@BradChristie:当'rel =“样式表”'''有''link''时,右键不是显式的,而是'no-op',参见[here](http://www.w3.org/) TR/html5/the-link-element.html#attr-link-type)和[here](http://www.w3.org/TR/html5/links.html#link-type-stylesheet)。同样在'script'上,默认值是**并且** always **是JavaScript,即使在IE5上,当微软认为他们可以使用VBScript进行竞争时也是如此。 :-) –