【问题标题】:How to detect browser support for "picture" element如何检测浏览器对“图片”元素的支持
【发布时间】:2015-09-20 20:31:35
【问题描述】:

作为更新我的网站以使其更加适合移动设备的一部分,我需要根据屏幕/浏览器大小提供不同的图像。 我遇到过使用“图片”元素,它在受支持时效果很好。目前的问题是它并非在所有地方都受支持。 我想检测浏览器是否支持“图片”元素,以便我可以回退到不同的方法。

如何检测浏览器是否支持“图片”元素?

由于这是我目前需要的唯一检查类型,因此我希望尽可能避免引入库(例如 Modernizr)。

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    找出是否支持picture 实际上非常简单:

    var pic = !!window.HTMLPictureElement;
    console.log("picture supported: " + pic);
    

    如果您的浏览器需要解决方法,这将打印false,如果它支持picture,则打印true。显然,这并不一定意味着对 picture 的支持也是完整且出色的(截至 2016 年初,它可能仍在许多浏览器中进行中)。

    不管picture 元素是否内置了回退,我相信有正当理由想知道浏览器是否支持picture 元素。

    例如,您可能希望提供自己的解决方法,而不是使用像 picturefill.js polyfill 这样的大型工具。

    【讨论】:

      【解决方案2】:

      您根本不需要检测浏览器。

      <picture> 规范要求<picture> 的最后一个子元素是<img>

      如果不支持<picture>,则<img> 将正常呈现。 <img> 是您的后备选项。

      【讨论】:

      • 是我的典型屏幕尺寸(在我的情况下为桌面)的后备。但是我需要依靠一种方法来为非默认图像大小(即移动)提供不同的图像。就我而言,它将回退到 Javascript。我只需要逻辑来确定是否需要这样的回退,即不支持 元素的情况。
      • 这个问题专门询问了检测图片元素支持,所以我会说这是一个错误的答案。
      • @duncanwilcox — 问题清楚地表明目标是提供后备。它还做出了一个错误的假设,即需要检测图片支持。这个答案解决了实际问题。
      • @Quentin - 如上所述,实际问题是根据设备屏幕尺寸(在本例中为移动设备)呈现合适尺寸的图像。所以我需要回退来支持各种决议。据我所知, 元素本身不支持此功能。因此,您提出的使用回退到 的默认行为的答案(虽然受到赞赏)并不能解决实际问题。
      【解决方案3】:

      这是我到目前为止提出的。

      注意:我只能在 Galaxy S4 和 S5 上的 Chrome、Galaxy S4 上的 WebView 和 iPhone 4 上的 Chrome 中进行测试。我的代码将在大屏幕上跳过此代码,所以我不需要在那里进行测试(它永远不会执行此代码)。因此,在有限的测试加上对此的“hacky”方法(只是闻起来很糟糕)加上我对这种方法的可行性/可靠性的有限了解之间,我不相信这甚至是一种可行的方法(更不用说一个好的方法了)。

      var mypic = document.createElement('picture');
      // Will be '[object HTMLPictureElement]' when supported; '[object HTMLUnknownElement]' otherwise
      var strObj = '' + mypic;
      if(strObj.indexOf("HTMLPictureElement") != -1)
      {
          // Picture element supported
      }
      else
      {
          // Picture element not supported
      }
      

      【讨论】:

        【解决方案4】:

        昆汀是对的;不需要 JS。但是,如果您需要根据媒体查询更改图像 URL,则可以使用 CSS。您可能需要考虑使用它来代替 <picture> 标记。

        @media (min-device-width: 600px) {
            .myimage {
                content: url(myimage.jpeg);
            }
        }
        

        断点(本例中为 600 像素)由您决定。

        【讨论】:

        • 这很有趣,根据这里的内容看起来很有希望。但从一些谷歌搜索12 看来,'content' CSS 属性似乎是与 :before 和 :after 伪元素一起使用的。 This SO page 表明它不在正式规范中,并且有不同的支持。对我来说更多的研究......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-24
        • 2010-10-10
        • 2014-05-15
        • 2011-10-17
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多