iframe父子页面之间传值需要在服务器下进行(因为一些浏览器不支持file://协议的页面跨框架获取)。
那么如何把本地文件变成http请求获取呢?
1.首先全局安装:serve: npm install -g serve
2.找到你想用http请求的文件目录
3.在目录下打开cmd
4.启动命令:serve -p 8080
5.直接访问localhost:8080即可访问到本地文件
那么在iframe父子页面之间进行传值操作时会经常遇到这样的坑,由于在一些浏览器可能不支持file://协议的页面夸框架获取,需要以http://协议访问页面。
还有一点当要获取值或对象时,要等框架内页面加载完成后才能获取。
例如现在有两个页面,一个页面是父页面,里面嵌套了一个iframe子页面,那么现在要让父页面得到子页面里的对象,该如何实现呢?如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>iframe</title>
<style>
*{
margin: 0;
padding:0;
}
.testBox{
width: 100%;
background:gray;
}
.iframeTest{
background:papayawhip;
}
</style>
</head>
<body>
<div class="testBox">
<iframe src="iframe.html" style="height:100%" frameborder="0" onload="ifrload(event)" id="iframeTest" scrolling="no"></iframe>
</div>
</body>
</html>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
<script>
function ifrload(event){
var str = $("#iframeTest").contents().find("#test");
console.log(str.html());
}
</script>
这是含有iframe的父页面,而子页面的是这个样子的:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>iframe1</title>
</head>
<body>
<p id="test">哈哈,这是一个测试.终于成功了</p>
</body>
</html>
<script src="https://code.jquery.com/jquery-3.3.1.js"></script>
如果直接在本地打开文件显示undefind:
这就是因为一些浏览器不支持file://协议的页面跨框架获取,那么我们将其放在http下就OK了,如图:
启动serve(注意,要在你将要访问的文件夹里打开命令行):
成功以后在浏览器里直接访问本地文件:
如图,点击iframe-test.html,然后打开控制台发现,原来的undefind已经变成了iframe.html里p标签的内容,说明此时,我们成功的在父子页面之间进行了传值:
接下来就可以按照实际需求进行页面之间的操作。
(emmmm,建议能使用框架的最好使用框架,比如vue、angular、react等主流框架,会方便很多)
公众号:Coder 杂谈,欢迎关注