前端iframe子页面与父页面通信问题

一个index.html,一个iframe.html,但是要注意,html文件必须放到服务器下访问,file协议下无法生效的。

1.普通需求:只需要子页面获取父页面元素

window.parent或者参考window.iframe用法,比较简单

2.霸气需求,drag拖动跨ifame(老式的mousedown + mousemove + mouseup模拟的drag事件无法实现)

这里借助HTML5中的drag and drop API

index.html
<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="/pfl/vendor/jquery.min.js"></script>
    <style>
    .trash{
        padding: 10px;
        height: 100px;
        background: #BCDAFA;
        border: 2px solid #8C96FF;
        font-size: 60px;
        line-height: 100px;
    }
    .trash.hover{
        background: #FFFFAB;
        border: 2px dashed red;
        color: red;
    }
    #iframe{width:100%;height:450px;}
    </style>
</head>
<body&g
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端页面中嵌入了来自其他域名的 iframe 时,由于浏览器的同源策略,iframe 中的页面无法直接访问页面的 DOM,也无法与页面进行通信。为了解决这个问题,可以通过代理页面来实现跨域访问。 具体实现步骤如下: 1. 在同域名下创建一个代理页面,例如 proxy.html。 2. 在代理页面中使用 JavaScript 代码获取 iframe页面的内容,并将其渲染到代理页面中。 3. 配置代理页面的服务端,使其能够将获取到的 iframe 页面内容返回给前端页面。 4. 在前端页面中嵌入代理页面,并通过代理页面的 URL 来访问 iframe 中的内容。 示例代码: proxy.html ```html <html> <head> <script> window.onload = function() { var iframe = document.createElement("iframe"); iframe.src = "http://otherdomain.com/page.html"; // 要访问的 iframe 页面 URL document.body.appendChild(iframe); iframe.onload = function() { var iframeDoc = iframe.contentWindow.document; var iframeContent = iframeDoc.documentElement.innerHTML; // 获取 iframe 页面内容 document.documentElement.innerHTML = iframeContent; // 渲染 iframe 页面内容到代理页面中 }; }; </script> </head> <body></body> </html> ``` 服务端代码(Node.js): ```javascript const http = require("http"); const request = require("request"); http .createServer((req, res) => { const url = "http://otherdomain.com/page.html"; // 要访问的 iframe 页面 URL request(url, (error, response, body) => { if (!error && response.statusCode === 200) { res.writeHead(200, { "Content-Type": "text/html" }); res.end(body); // 将获取到的 iframe 页面内容返回给前端页面 } }); }) .listen(8080); ``` 在前端页面中嵌入代理页面: ```html <iframe src="http://localhost:8080/proxy.html"></iframe> <!-- 代理页面 URL --> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值