- Типичное решение проблемы не работает в React из-за его динамически генерируемую структуру компонентов и события модели, в отличии от традиционных статического HTML:
сценарий:Настройка высоты IFrame для scrollHeight в ReactJS
<script>
function resizeIframe(obj) {
obj.style.height = obj.contentWindow.document.body.scrollHeight + 'px';
}
</script>
HTML:
<iframe src="..." frameborder="0" scrolling="no" onload="resizeIframe(this)" />
Существует НПЙ пакет
react-iframe
, но выглядит незаконченным (принимает только реквизитurl
,width
,height
):Вероятная часть раствора, чтобы прослушать
load
событиеiframe
, но таким образом, который совместим с React.
Есть ли способ в React, чтобы установить высоту в iframe
на высоту его прокручивать содержимое?
мой код:
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import Iframe from 'react-iframe'
export default class FullheightIframe extends Component {
componentDidMount() {
console.log("IFRAME DID MOUNT");
}
renderReactFrame() {
return (
<Iframe url="http://www.example.com" width="100%" height="100%" onLoad={()=>{console.log("IFRAME ON LOAD")}}></Iframe>
);
}
renderHTMLFrame() {
return (
<iframe
onLoad={(loadEvent)=>{
// NOT WORKING var frameBody = ReactDOM.findDOMNode(this).contentDocument.body; // contentDocument undefined
// NOT WORKING obj.nativeEvent.contentWindow.document.body.scrollHeight // contentWindow undefined
}}
ref="iframe"
src="http://www.example.com"
width="100%"
height="100%"
scrolling="no"
frameBorder="0"
/>
);
}
render() {
return (
<div style={{maxWidth:640, width:'100%', height:'100%', overflow:'auto'}}>
{this.renderHTMLFrame()}
</div>
);
}
}
Это решение должно работать, но это не делает (не находя 'obj'):' неперехваченным TypeError: не удается прочитать свойство 'документ' в undefined' –
Update: Это было исправлено с использованием 'iframe' в качестве корневого элемента в методе возврата компонента. Теперь проблема заключается в том, что высота устанавливается на '8px'. Вероятно, потому что iframe еще не полностью загружен. –
Невозможно прочитать документ свойства undefined - это означает, что contentWindow не найден - это значит, что iFrame не загружается. Это означает, что вам нужно добавить прослушиватель событий в iFrame - iframe.addEventListener ('load', function() {... –