【问题标题】:Load a javascript file and css file depending on user agent根据用户代理加载 javascript 文件和 css 文件
【发布时间】:2012-12-10 14:12:46
【问题描述】:

就像标题一样。

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

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

【问题讨论】:

    标签: javascript html user-agent


    【解决方案1】:
    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);
    }
    

    或者 iPad 的 User-Agent 标头中的任何内容。

    参考资料:

    【讨论】:

    • 我一直使用navigator.userAgent.match(/iPad/i) != null来检测iPad
    • @barts:注意,感谢您提供的信息。我会更新我的答案以反映。
    • 谢谢你们的全面回答。这真的帮助了我:)
    【解决方案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。)

    【讨论】:

    • 虽然我同意您不需要需要指定类型,但我从 foo.png 的旧时代得到了草图,标题中包含 Content-Type: text/javascript。我想我觉得在很多情况下,显式比隐式更安全。
    • @BradChristie:是的,但是link 上的type 当有rel="stylesheet" 时不是明确的,它是无操作的,请参阅herehere。同样在script 上,默认值是并且总是 一直是JavaScript,即使在微软认为他们可以使用VBScript 竞争的IE5 上也是如此。 :-)
    猜你喜欢
    • 2012-10-02
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2021-10-21
    • 2020-08-01
    相关资源
    最近更新 更多