iframe嵌套页面使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     // 设置全屏显示样式
        html,body{
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
        
        <iframe src="https://blog.gitee.com/" frameborder="0" width="100%" height="100%"></iframe>
</body>
</html>

优点:便于修改,模块分离,在一些信息管理系统会用到
缺点:比一般的创建dom元素慢,会阻塞页面的加载,如果页面的onload事件不能及时触发,用户会以为加载比较慢,用户体验不好,在safari和chrome中可以通过js动态的设置iframe的src属性避免阻塞。

### Vue 中使用 iframe 嵌入 HTML 页面 在 Vue 项目中嵌入 HTML 页面可以通过 `<iframe>` 标签实现。为了更好地管理和控制 iframe 的行为,可以利用 Vue 组件化的优势来封装 iframe。 #### 创建一个简单的 iframe 组件 创建一个新的组件 `IframeComponent.vue`: ```vue <template> <div class="iframe-container"> <iframe :src="url" frameborder="0"></iframe> </div> </template> <script> export default { props: ['url'], }; </script> <style scoped> .iframe-container { width: 100%; height: 600px; } iframe { width: 100%; height: 100%; } </style> ``` 这个组件接收一个 URL 属性并将其设置为 iframe 的源地址[^1]。 #### 在父组件中使用 IframeComponent 假设有一个名为 `ParentComponent.vue` 的父组件,在其中引入并注册 `IframeComponent`: ```vue <template> <div> <button @click="loadPage">加载页面</button> <IframeComponent v-if="showIframe" :url="pageUrl"/> </div> </template> <script> import IframeComponent from './components/IframeComponent'; export default { components: { IframeComponent }, data() { return { showIframe: false, pageUrl: '' }; }, methods: { loadPage() { this.pageUrl = 'https://example.com'; this.showIframe = true; } } }; </script> ``` 这里定义了一个按钮用于触发 iframe 加载指定的 URL 地址,并通过条件渲染的方式显示/隐藏 iframe[^3]。 #### 跨域通信与交互 当涉及到跨域场景下父子页面之间的调用时,则需遵循浏览器的安全策略——同源政策(SOP),即只有协议、域名和端口都相同的情况下才允许直接访问对方的内容窗口对象(window);对于不同源的情况则可通过 postMessage API 实现安全的数据交换[^2]。 例如,在子页面内发送消息给父级 Vue 应用程序: ```javascript // 子页面中的 JavaScript 代码 window.parent.postMessage('来自 iFrame 的问候', '*'); ``` 而在父页面监听这些消息: ```javascript mounted() { window.addEventListener('message', function(event) { console.log(`收到的消息:${event.data}`); }); }, beforeDestroy() { window.removeEventListener('message', /* ... */); } ``` 这样就可以实现在不同的上下文中互相传递数据而不违反安全性原则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值