我的应用程序中有一个非常奇怪的错误,如果通过点击ESCAPE将< iframe>
添加到DOM中,则无法加载。
类App扩展了React.Component {
 constructor(){
超级()
 this.state = {toggled:true}
 this.toggle = this.toggle.bind(this)
 }

 componentDidMount(){
 document.addEventListener('keydown',(e)=> {
 if(e.keyCode === 27){
 //在点击ESC&#xA时取消注释下一行以使视频正常工作; // e.preventDefault()
 this.setState({toggled:false})
}
})
 }

 toggle(){
 this.setState({toggled:!this.state.toggled})
 }

 render(){
返回(
< div>
 {this.state.toggled
?< div>点击ESC以显示视频< / div>
 :(
< div>
< div>< button onClick = {this.toggle}>隐藏视频< / button>< / div>
< iframe width =“560”height =“315” src =“https://www.youtube.com/embed/lUOK2ZpjvaM”frameborder =“0”>< / iframe>
< / div>
)
}&# xA;< / div>
)
 }
}



 

 您在这里看到的是一个简单的React应用程序,它显示了嵌入式YouTube-点击ESCAPE时的视频。但是有一些我不明白的事情:< iframe>
仅在 keydown
事件上的 preventDefault()
时加载。
为什么这有必要?我在Chrome和Firefox中观察到了这种行为。

答案 0 :(得分:3)
这是浏览器的默认行为 - 按escape
将停止加载页面。
iframe
会在当前页面中加载另一个完整的网页,因此普通网页的所有按键操作仍然适用于iframe
。
你可以通过在keydown上使用event.preventDefault()来防止这种情况。如果键是转义键,则只调用preventDefault是个好主意,否则你将阻止所有其他键的默认操作。
在你的keydown事件中你应该添加如下内容:
if (event.keyCode === 27) {
event.preventDefault();
}