在 IE 的 html 页面中重新加载嵌入的 swf
Posted
技术标签:
【中文标题】在 IE 的 html 页面中重新加载嵌入的 swf【英文标题】:reload embedded swf in html page in IE 【发布时间】:2017-12-04 11:22:56 【问题描述】:我在 html 页面中嵌入了一个 swf 文件。我想在不刷新页面的情况下重新加载 swf 文件。
这里也有同样的问题:reload/ reset embedded swf on click
我尝试了接受的答案,它在 chrome 中有效:
var obj = $("object#flash_99674493");
obj.html(obj.html());
但它似乎在 IE 中不起作用。如何让它在 IE 中运行?
【问题讨论】:
你使用github.com/swfobject/swfobject 吗?它包含添加和删除 swf 的特殊方法。 为什么不处理 swf 内部的重置? @DenisKokorin 是的,我愿意。但是我找不到重新加载它的方法。你可以再详细一点吗?谢谢。 【参考方案1】:如果您的.swf
嵌入了<object>
,请使用data
属性:
document.getElementById('flash_99674493').data += '';
对于嵌入<embed>
的使用src
:
document.getElementById('flash_99674493').src += '';
将空字符串添加到data
或src
会导致它们重新加载。
在 IE 中,我们必须将对象替换为相同的对象:
var o = document.getElementById('flash_99674493');
var n = o.cloneNode(!0);
o.parentNode.insertBefore(n, o);
o.parentNode.removeChild(o);
【讨论】:
我已经尝试过这种方法,虽然它在 Chrome/Safari 中运行良好,但在 IE 中似乎不起作用。你能改进一下吗? 它确实有效,但之前已经发布了另一个答案,所以我接受了这个答案。您的代码干净高效,干得好!非常感谢。 @Sefier,接受的答案重写了对象的子节点。如果您使用embed
或您的 object
没有 param
子节点,则此方法将不起作用。由您决定哪种解决方案考虑最佳答案以及使用哪种 J。【参考方案2】:
您是否尝试过使用包装器使用常规 javascript?我在 IE 9 等旧浏览器上对此进行了测试。
<!-- wrapper around your flash object -->
<div id="flash-content">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" id="SoundSpectrum2" align="middle">
<param name="movie" value="SoundSpectrum2.swf" />
<param name="quality" value="high" />
...
然后是 JavaScript:
function reloadFlash()
var content = document.getElementById('flash-content');
var currentArray = [];
while (content.firstChild)
currentArray.push(content.firstChild.cloneNode(true));
content.removeChild(content.firstChild);
currentArray.forEach(function(item)
content.appendChild(item)
);
【讨论】:
以上是关于在 IE 的 html 页面中重新加载嵌入的 swf的主要内容,如果未能解决你的问题,请参考以下文章
如何在IE浏览器中重新加载/刷新页面而不使用JS弹出表单重新提交
PHP 标头重定向不会在 IE 中重新加载 <iframe>