如何关闭在iframe中创建的所有AudioContexts?

时间:2015-10-13 11:13:20

标签: javascript html iframe web-audio

我正在开发一个Web应用程序,用户可以在其中编写Web Audio代码并在iframe中预览其代码。每当更改输入文本区域时,都会更新iframe contentDocument

问题在于,当用户创建AudioContext时,会在旧的上下文中创建新的上下文。这很快就会导致创建太多的AC,并且还会留下任何以前的AC。

我需要一种做某事的方法,比如

var iframe = document.getElementsByTagName("iframe")[0];

for (ac in iframe.contentWindow.audioContexts) {
    ac.close();
}

iframe.contentDocument.open();
iframe.contentDocument.write("//some new js/html code here");

这只是概念代码,显然不起作用。有没有办法有效地“重新加载”在iframe中创建的所有音频内容,就像重新加载标准网页时重新加载一样?

1 个答案:

答案 0 :(得分:0)

如何在iframe

中重新加载所有AudioContexts

好吧,我找到了一种对每个人来说都不是最佳的方法,但仍然有效。

基本上,您需要模拟在iframe中重新加载网站。

这可以通过多种方式完成,例如:

var iframe = document.getElementsByTagName("iframe")[0];

iframe.onload = function() {
    iframe.contentDocument.open();
    iframe.contentDocument.write("//some new js/html code here");
    iframe.contentDocument.close();
}
// src can be an empty string if you're not loading anything into it by default
iframe.src = your_iframe_src || "";

现在,这不是超级快,它确实在我的应用程序中引入了一些延迟,但这可以通过使用单独的渲染/验证循环来解决。