欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue iframe 問題

謝彥文2年前11瀏覽0評論

vue中使用iframe是很常見的操作,但是在使用過程中可能會遇到一些問題,下面我們來一一解決。

第一個問題是iframe加載不出來。這是因為vue的模板渲染是異步的,而iframe的加載是同步的,導致iframe在模板渲染完之前就已經開始加載了。那么解決方法就是使用vue的nextTick方法,在模板渲染完之后再去加載iframe。

mounted(){
this.$nextTick(() =>{
this.$refs.iframe.src = 'https://www.baidu.com';
})
}

第二個問題是跨域訪問被拒絕。這是因為瀏覽器的同源策略限制了跨域訪問。我們可以使用postMessage方法來跨域通信,父頁面向子頁面發送消息,子頁面接收到消息后再將結果返回給父頁面。

//父頁面
mounted() {
this.iframeWindow.postMessage('hello', 'https://www.baidu.com');
},
methods:{
receive(event) {
console.log(event.data);
}
},
created(){
window.addEventListener('message', this.receive, false);
}
//子頁面
mounted() {
window.addEventListener('message', (event) =>{
if (event.origin !== 'https://www.baidu.com') return;
event.source.postMessage('world', event.origin);
}, false);
}

第三個問題是動態改變iframe的高度。這是因為iframe的高度無法獲取到,但是我們可以通過監聽iframe內部的內容變化來動態改變iframe的高度。

mounted() {
this.$nextTick(() =>{
const iframe = this.$refs.iframe;
const height = iframe.contentDocument.body.scrollHeight;
iframe.style.height = height + 'px';
});
},
created() {
window.addEventListener('resize', this.resetIframeHeight);
},
methods: {
resetIframeHeight() {
const iframe = this.$refs.iframe;
const height = iframe.contentDocument.body.scrollHeight;
iframe.style.height = height + 'px';
}
},
beforeDestroy() {
window.removeEventListener('resize', this.resetIframeHeight);
}

以上就是關于vue iframe問題的解決方法,希望對大家有所幫助。