【HTML】iframe 嵌入页面用法

文章目录

基本使用

  • 基本使用方式就是:
<style type="text/css">
	/* 
		推荐使用css设置iframe的样式,因为height设置成100%会失效,
		而这时就要用到vh单位,但是iframe标签不支持,css可以。 
	*/
	.css{
		width: 100%;
		height: 100vh;	/* 视口的100%高度 */
		border: 0;		/* 把他自带的边框去掉,不然会有违和感 */
	}
</style>
<iframe src="https://www.baidu.com" class="css" ></iframe>
<!-- 
	不推荐的属性,建议用css设置:
	width:像素值或百分比,框架作为一个普通元素的宽度,建议使用css设置。 
	height:像素值或百分比,框架作为一个普通元素的高度,建议使用css设置。 
	frameborder:0(无边框)或1(带边框),框架是否自带,建议使用css设置。 
 -->
  • 常用属性设置:
属性属性值说明
name字符串框架的名称,window.frames[name]时专用的属性
srcurl地址或文件路径可以使页面地址,也可以是图片的地址。

### 如果解决iframe嵌入页面时遇到的跨域问题 当使用iframe嵌入其他域名下的资源时,可能会遭遇跨域限制。这主要是由于现代浏览器的安全策略所引起的,特别是对于第三方Cookie的支持逐渐减少。针对这一情况,存在多种解决方案。 #### 方案一:统一主域名 官方推荐的方法是采用统一主域名的方式[^1]。这意味着所有的子系统都部署在同一顶级域名下,比如`example.com`及其子域名如`sub.example.com`。这样做能够有效规避大多数由跨域引发的问题,因为同源政策允许这些站点之间共享数据而无需额外配置。 #### 方案二:调整服务器响应头设置 另一种常见做法是在服务端修改HTTP头部信息来支持CORS(Cross-Origin Resource Sharing),即跨源资源共享协议。具体来说,在返回HTML文档的同时附加上如下所示的相关字段: ```http Access-Control-Allow-Origin: * // 或者指定特定来源 Access-Control-Allow-Origin: https://yourdomain.com ``` 此外还可以加入更多控制选项以增强安全性并满足实际需求: ```http Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 86400 ``` 以上措施有助于确保客户端可以从同的源安全地访问API接口或静态文件等内容[^2]。 #### 方案三:借助代理中间件 如果无法更改目标网站的服务端配置,则可考虑建立自己的反向代理服务器作为中介层。该代理位于同一原点内,并负责转发请求至远程地址;与此同时它也会处理好必要的身份验证流程以及Cookies管理等问题。这种方式特别适用于那些对外部系统的依赖程度较高的应用场景中[^4]。 #### 实现示例 - 使用Vue.js框架中的动态创建Proxy Iframe技术 这里给出一段基于Vue3项目的简单代码片段用于展示如何实现上述提到的技术之一——通过在子窗口(child)内部构建指向本地路径(proxy)的新IFRAME实例来进行间接通信的过程: ```javascript import { ref, onMounted } from 'vue'; export default { setup() { const frameSrc = ref(''); // 假设这是来自路由元数据里的URL字符串 let currentRouteMetaFrameSrc = '/path/to/proxy.html'; onMounted(() => { setTimeout(function () { var proxyIfr = document.createElement('iframe'); proxyIfr.src = `${location.origin}${currentRouteMetaFrameSrc}?data=encodedMessage`; proxyIfr.style.display = "none"; document.body.appendChild(proxyIfr); window.addEventListener('message', receiveMessage); function receiveMessage(event){ console.log(`Received message: ${event.data}`); // 处理接收到的消息... // 移除监听器防止内存泄漏 window.removeEventListener('message', receiveMessage); } }, 500); }); return { frameSrc, }; }, }; ``` 此段脚本会在组件挂载完成后等待半秒钟再执行后续逻辑,从而保证DOM结构已完全渲染完毕。之后会临时插入一个隐藏式的IFRAME标签到当前网页体内并通过查询参数携带所需传输的数据给定好的处理器页面(proxy.html)。最后注册了一个全局事件监听函数用来接收从那个新打开的小窗传回来的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一颗不甘坠落的流星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值