我正在开发一个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中创建的所有音频内容,就像重新加载标准网页时重新加载一样?
答案 0 :(得分:0)
好吧,我找到了一种对每个人来说都不是最佳的方法,但仍然有效。
基本上,您需要模拟在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 || "";
现在,这不是超级快,它确实在我的应用程序中引入了一些延迟,但这可以通过使用单独的渲染/验证循环来解决。