我有个小问题在从服务请求数据后,我得到了一个iframe代码作为响应。
<iframe src="https://www.example.com/show?data..." width="540" height="450"></iframe>
字符串我想把它作为一个props传递给我的模态组件并显示它,但是当我在render函数中简单地{this.props.iframe}它时,它显然是把它显示为一个字符串。
{this.props.iframe}
在react或使用JSX中将其显示为html的最佳方法是什么?
zxlwwiss1#
如果你不想使用危险的SetInnerHTML,那么你可以使用下面提到的解决方案
var Iframe = React.createClass({ render: function() { return( <div> <iframe src={this.props.src} height={this.props.height} width={this.props.width}/> </div> ) } }); ReactDOM.render( <Iframe src="http://plnkr.co/" height="500" width="500"/>, document.getElementById('example') );
字符串这里有现场演示Demo
wswtfjt72#
您可以像这样使用属性dangerouslySetInnerHTML
dangerouslySetInnerHTML
const Component = React.createClass({ iframe: function () { return { __html: this.props.iframe } }, render: function() { return ( <div> <div dangerouslySetInnerHTML={ this.iframe() } /> </div> ); } }); const iframe = '<iframe src="https://www.example.com/show?data..." width="540" height="450"></iframe>'; ReactDOM.render( <Component iframe={iframe} />, document.getElementById('container') );
个字符同样,你可以从包含<iframe>标签的string(* 基于问题,你从服务器获取作为字符串的iframe *)复制所有属性,并将其传递给新的<iframe>标签,如下所示
<iframe>
/** * getAttrs * returns all attributes from TAG string * @return Object */ const getAttrs = (iframeTag) => { var doc = document.createElement('div'); doc.innerHTML = iframeTag; const iframe = doc.getElementsByTagName('iframe')[0]; return [].slice .call(iframe.attributes) .reduce((attrs, element) => { attrs[element.name] = element.value; return attrs; }, {}); } const Component = React.createClass({ render: function() { return ( <div> <iframe {...getAttrs(this.props.iframe) } /> </div> ); } }); const iframe = '<iframe src="https://www.example.com/show?data..." width="540" height="450"></iframe>'; ReactDOM.render( <Component iframe={iframe} />, document.getElementById('container') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="container"><div>
的字符串
kpbpu0083#
有了ES6,你现在可以这样做
要加载的示例Codepen URL
const iframe = '<iframe height="265" style="width: 100%;" scrolling="no" title="fx." src="//codepen.io/ycw/embed/JqwbQw/?height=265&theme-id=0&default-tab=js,result" frameborder="no" allowtransparency="true" allowfullscreen="true">See the Pen <a href="https://codepen.io/ycw/pen/JqwbQw/">fx.</a> by ycw(<a href="https://codepen.io/ycw">@ycw</a>) on <a href="https://codepen.io">CodePen</a>.</iframe>';
字符串
加载Iframe的函数组件
function Iframe(props) { return (<div dangerouslySetInnerHTML={ {__html: props.iframe?props.iframe:""}} />); }
型
用法:
import React from "react"; import ReactDOM from "react-dom"; function App() { return ( <div className="App"> <h1>Iframe Demo</h1> <Iframe iframe={iframe} />, </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);
CodeSandbox编辑:
https://codesandbox.io/s/react-iframe-demo-g3vst
bvjveswy4#
解决你的问题很简单只需将以下css代码添加到index.css文件中:
iframe{ pointer-events: none; }
字符串这个代码对我有用。
4条答案
按热度按时间zxlwwiss1#
如果你不想使用危险的SetInnerHTML,那么你可以使用下面提到的解决方案
字符串
这里有现场演示Demo
wswtfjt72#
您可以像这样使用属性
dangerouslySetInnerHTML
个字符
同样,你可以从包含
<iframe>
标签的string(* 基于问题,你从服务器获取作为字符串的iframe *)复制所有属性,并将其传递给新的<iframe>
标签,如下所示的字符串
kpbpu0083#
有了ES6,你现在可以这样做
要加载的示例Codepen URL
字符串
加载Iframe的函数组件
型
用法:
型
CodeSandbox编辑:
https://codesandbox.io/s/react-iframe-demo-g3vst
bvjveswy4#
解决你的问题很简单只需将以下css代码添加到index.css文件中:
字符串
这个代码对我有用。