Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/421.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向父级发送数据的动态iframe_Javascript_Html_Iframe - Fatal编程技术网

Javascript 向父级发送数据的动态iframe

Javascript 向父级发送数据的动态iframe,javascript,html,iframe,Javascript,Html,Iframe,我想提前买一份SantaClaus的礼物。。。我的文档中有两个脚本,第一个('init.js')放在头部,第二个('index.js')放在文档末尾的/html标记之前一旦页面内容被加载,init.js就定义了很多变量,这些变量可用于以后的“index.js”加载 在“init.js”中构建动态iframe: let ifrm = document.createElement( 'iframe' ); ifrm.id = "getuserdata"; ifrm.setAttribute("sr

我想提前买一份SantaClaus的礼物。。。我的文档中有两个脚本,第一个('init.js')放在头部,第二个('index.js')放在文档末尾的/html标记之前一旦页面内容被加载,init.js就定义了很多变量,这些变量可用于以后的“index.js”加载

在“init.js”中构建动态iframe:

let ifrm = document.createElement( 'iframe' );
ifrm.id = "getuserdata"; 
ifrm.setAttribute("src", "getuserdata.html");    
document.body.appendChild( ifrm );
在iframe中计算数据后,数据将发送给父级:

parent.getVals(data);
父级关闭iframe并创建'index.js'的值

function getVals(data){
   document.getElementById('getuser').outerHTML = "";
   delete document.getElementById('getuser');   
   let userdata = data;
 }

一切都很好,但是。。。但是iframe中的console.log(data)用于验证数据是否正确,当iframe存在时,它会在我的控制台顶部显示数据值(正常,它是‘init’)。但是当它消失时(iframe被删除),在加载页面内容并显示第一个'index.js'console.log之后,脚本继续发送console.log超过40或50次。你知道为什么吗?这不是一个很大的问题,但我不明白为什么在关闭iframe后会收到所有这些通知。

您可以使用“消息”事件在子级和父级之间共享数据。如果可能的话,在codepen或jsfiddle.yes中创建一个演示,但对于如此小的数据,这两个部分的消息都是大量的代码。在生成内容的整个过程中,当我需要与iframe对话时,我使用message。当我们创建iframe时,它会在父dom中创建另一个dom。所以只有一种沟通方式就是事件。你不能直接从孩子到父母沟通,反之亦然。你可以尝试一些黑客,但我认为这不是一个正确的方法。是的,它是有效的,在iframe中生成的数据可以立即在父级中获得,这不是要解决的问题。要解决(或解释)的问题是:为什么这个iframe一旦被删除,就会继续向父级发送40或50倍的数据?