【发布时间】:2018-02-16 18:20:17
【问题描述】:
我的应用程序中有一个非常奇怪的错误,如果通过点击 ESCAPE 将 <iframe> 添加到 DOM,则无法加载它。
class App extends React.Component {
constructor() {
super()
this.state = { toggled: true }
this.toggle = this.toggle.bind(this)
}
componentDidMount() {
document.addEventListener('keydown', (e) => {
if (e.keyCode === 27) {
// Uncomment the next line to make the video work when hitting ESC
// e.preventDefault()
this.setState({ toggled: false })
}
})
}
toggle() {
this.setState({ toggled: !this.state.toggled })
}
render() {
return (
<div>
{this.state.toggled
? <div>Hit ESC to show the video</div>
: (
<div>
<div><button onClick={this.toggle}>Hide video</button></div>
<iframe width="560" height="315" src="https://www.youtube.com/embed/lUOK2ZpjvaM" frameborder="0"></iframe>
</div>
)
}
</div>
)
}
}
您在这里看到的是一个简单的 React 应用,当您点击 ESCAPE 时,它会显示嵌入的 YouTube 视频。不过,我对此有一些不明白的地方:<iframe> 仅在我在 keydown 事件中 preventDefault() 时加载。
为什么这是必要的?我在 Chrome 和 Firefox 中观察到了这种行为。
【问题讨论】:
-
IFrame 基本上是页面内的浏览器。如果你在加载时进入一个页面,然后点击退出,它将停止。所以这就是这里发生的事情。也许比 ESCAPE 更好的键,可能是一个想法。或者做你的 preventDefault() 是解决方案。
标签: javascript html dom iframe web