变更iframe的src后 无法调用新src文件函数 只能调用旧src的函数
下文 变更的iframe标签的id和name都是“iframeRight”
新的src和旧src都是本机文件
//父级页面
function send_songdata1(data){
var k=document.getElementById("iframeRight").src
console.log(k);
document.getElementById("iframeRight").src="新的src";
var i=document.getElementById("iframeLeft").src
console.log(i)
window.frames["iframeRight"].send_songdata2(data);
}
//旧src设置的函数
function send_songdata2(data){
console.log(111);
console.log(data)
}
//新src设置函数
function send_songdata2(data){
console.log(222);
console.log(data)
}
运行结果:
变了 iframe 的 src 后,你要使用 onload 事件。保证新页面已加载完成,再调用新页面里的函数试试,修改后的:
// 父级页面
function send_songdata1(data){
var iframeRight = document.getElementById("iframeRight");
console.log(iframeRight.src);
iframeRight.src="新的src";
iframeRight.onload = function() {
window.frames["iframeRight"].send_songdata2(data);
}
}
// 旧src设置的函数
function send_songdata2(data){
console.log(111);
console.log(data)
}
// 新src设置函数
function send_songdata2(data){
console.log(222);
console.log(data)
}
新frame还未加载完成
该回答引用ChatGPT
可以在变更 iframe 的 src 后,在一定时间内等待页面加载完成,再通过 window.frames 调用新 src 里的函数。
例如:
function send_songdata1(data){
document.getElementById("iframeRight").src = "新的src";
setTimeout(function(){
window.frames["iframeRight"].send_songdata2(data);
}, 500);
}
将代码中的 setTimeout 的时间设置足够长,以确保新 src 的页面加载完成。
你需要等待加载完毕
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script>
function send_songdata1() {
var data = Math.random()
console.log(document.getElementById("iframeRight").src);
window.frames["iframeRight"].contentWindow.send_songdata2(data);
document.getElementById("iframeRight").src = "iframe2.html";
console.log(document.getElementById("iframeRight").src);
let testFun = () => window.frames["iframeRight"].contentWindow.send_songdata2(data);
setTimeout(testFun, 1000)
document.getElementById("iframeRight").onload = testFun
}
</script>
<body>
<button onclick="send_songdata1()">测试</button>
<iframe id="iframeRight" height="100" width="100" src="iframe1.html"></iframe>
</body>
</html>
我重写了一个实现,你参考一下
第一,你需要将 iframe 作为一个对象保存到变量里
第二,你要监控 iframe 的 src 变动,在变动时触发你定义的 onload 事件
第三,在完成新页面加载后,再调用他定义的函数
function test(){
var ifr = window.frames['ifr']
ifr.contentWindow.onload = function(){
var win = arguments[0].currentTarget
win.test()
}
console.log(ifr.src)
document.getElementById('ifr').src='new.html'
console.log(ifr.src)
//ifr.contentWindow.test()
}