React.js 如何返回评论视频标签以支持 ie9

Posted

技术标签:

【中文标题】React.js 如何返回评论视频标签以支持 ie9【英文标题】:React.js how to return commented video tag for ie9 support 【发布时间】:2015-12-27 16:19:20 【问题描述】:

假设在 React 中我想通过包装我的代码来支持 ie9,就像 picturefill 的这个示例一样:

<picture>
  <!--[if IE 9]><video style="display: none;"><![endif]-->
  <source srcset="examples/images/extralarge.jpg" media="(min-width: 1000px)">
  <source srcset="examples/images/large.jpg" media="(min-width: 800px)">
  <!--[if IE 9]></video><![endif]-->
  <img srcset="examples/images/medium.jpg" >
</picture>

在反应中,那将是:

return (
                <picture>
                <!--[if IE 9]><video style="display: none;"><![endif]-->
                <source type="image/webp" className="full-photo2 slide-init" srcSet="./build/assets/images/photos/responsive/webp/" + image.id + "-400.webp 400w, ./build/assets/images/photos/responsive/webp/" + image.id + "-800.webp 800w, ./build/assets/images/photos/responsive/webp/" + image.id + "-1000.webp 1000w," />
                <img className="full-photo2 slide-init" srcSet="./build/assets/images/photos/responsive/jpg/" + image.id + "-400.jpg 400w, ./build/assets/images/photos/responsive/jpg/" + image.id + "-800.jpg 800w, ./build/assets/images/photos/responsive/jpg/" + image.id + "-1000.jpg 1000w," />
                <!--[if IE 9]></video><![endif]-->  
            </picture>
 )

当然,React 对此很生气。

那么如何在 React 返回中返回这样的 IE9 hack?

【问题讨论】:

虽然不鼓励使用,但您可以尝试facebook.github.io/react/tips/dangerously-set-inner-html.html 如何使用注释语法? 我在想这样的事情(未经测试)gist.github.com/djkirby/a6ef3e60ffc213b095da 见nemisj.com/conditional-ie-comments-in-react-js 提交一个关于 React 的错误以支持插入 HTML cmets。 【参考方案1】:

根据上面的链接,关于使用 dangerouslySetInnerHTML 的所有注意事项,这就是我所做的工作(使用 ES6):-

const createMarkup = () => 
  return  __html:
    `<!--[if IE 9]><video style="display: none;"><![endif]-->
    <source srcSet="examples/images/extralarge.jpg" media="(min-width: 1000px)">
    <source srcSet="examples/images/large.jpg" media="(min-width: 800px)">
    <!--[if IE 9]></video><![endif]-->
    <img src="examples/images/medium.jpg" >`
  ;
;

return (
  <picture dangerouslySetInnerHTML=createMarkup()>
  </picture>
)

您当然也可以将参数传递给createMarkup 函数,并使用$ 语法(Getting Literal With ES6 Template Strings)将模板字符串中的参数作为占位符插入:-

const createMarkup = (path) => 
  return  __html:
    `<!--[if IE 9]><video style="display: none;"><![endif]-->
    <source srcSet="$pathextralarge.jpg" media="(min-width: 1000px)">
    <source srcSet="$pathlarge.jpg" media="(min-width: 800px)">
    <!--[if IE 9]></video><![endif]-->
    <img src="$pathmedium.jpg" >`
  ;
;

return (
  <picture dangerouslySetInnerHTML=createMarkup('examples/images/')>
  </picture>
)

【讨论】:

以上是关于React.js 如何返回评论视频标签以支持 ie9的主要内容,如果未能解决你的问题,请参考以下文章

如何让iPhone手机支持H5页面的video标签

如何使用 React js 检测浏览器标签关闭事件?

HTML HTML标签IE条件评论

audio标签兼容IE11

React.js基础篇(实战)——评论功能

React.js最佳实践01