在 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 += '';

将空字符串添加到datasrc 会导致它们重新加载。

在 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上iframe操作时闪烁的问题,重新加载的问题

如何安排 IE 页面重新加载

如何在IE浏览器中重新加载/刷新页面而不使用JS弹出表单重新提交

PHP 标头重定向不会在 IE 中重新加载 <iframe>

JSP页面。突然间页面就处于加载中。重装浏览器,或者重新安装JAVA虚拟机都不可以解决。用的是IE6和360

嵌入的音频在 Safari/iOS 上不可见