vue中内嵌iframe的src更新页面未刷新问题的解决方法
warning:
这篇文章距离上次修改已过197天,其中的内容可能已经有所变动。
<template>
<div>
<iframe
:src="iframeUrl"
width="100%"
height="600"
frameborder="0"
id="myIframe"
@load="iframeLoaded"
></iframe>
</div>
</template>
<script>
export default {
data() {
return {
iframeUrl: 'http://example.com'
};
},
methods: {
iframeLoaded() {
// 当iframe加载完成后,我们可以在这里执行一些操作
console.log('Iframe has loaded');
},
updateIframeUrl(newUrl) {
this.iframeUrl = newUrl;
const iframe = document.getElementById('myIframe');
// 使用内容可见性API检查iframe是否已经加载
if (iframe.contentWindow && iframe.contentWindow.document.readyState === 'complete') {
// 如果已加载,直接更新src属性
iframe.src = newUrl;
} else {
// 如果未加载,设置定时器在一段时间后再次尝试更新src
setTimeout(() => {
this.updateIframeUrl(newUrl);
}, 500);
}
}
},
// 假设你有一个方法来触发iframe的更新
// 例如,当你从下拉菜单或其他交互中选择一个新的URL时
watch: {
someDataFromParent() {
const newUrl = this.generateNewIframeUrl();
this.updateIframeUrl(newUrl);
}
}
};
</script>
这个代码示例展示了如何在Vue组件中更新内嵌iframe的src
属性,并确保页面刷新。它使用了contentWindow.document.readyState
来检查iframe是否已经加载,如果没有加载,它会设置一个定时器并在iframe准备好时更新src
。
评论已关闭