`
陈修恒
  • 浏览: 204900 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【IE9】iframe中嵌入flash,会有内存泄漏问题

 
阅读更多
引:http://stackoverflow.com/a/18453540

引用

This appears to be an IE9-only bug.

It occurs when a Flash object interacts with a HTML document using JavaScript (ExternalInterface on the Flash/ActionScript-side) and rears it's ugly head when an IFRAME containing the HTML document w/ the Flash Object comes into play.

Seeing how you specify you're using the YouTube API, there is sadly nothing you can do to make sure the Flash unregisters itself and won't call JavaScript functions (or vice versa) when it's time to remove it as you rely on third party software running outside your applications domain.

If you don't NEED the YouTube API, but merely a quick way to get a video within your application, the safest bet is to use an old style object embed for IE9 and the API / IFRAME embedding for the rest of the sane world.
<object width="{WIDTH}" height="{HEIGHT}">
  <embed src="https://www.youtube.com/v/{VIDEO_ID}?version=3&autoplay=1"
         type="application/x-shockwave-flash"
         allowscriptaccess="always"
         width="{WIDTH}" height="{HEIGHT}"></embed>
</object>

Removing above object (you can use SWFObject's "embedSWF" and "removeSWF" just fine for this btw) will get the video player off your page, without throwing any _flash_remove.. warnings.

If you NEED the YouTube API / control over the video player state:

Have you tried invoking the "destroy"-method on the ytplayer ? Unvoke the destroy and while I'm reluctant to posting "answers" using timeouts, give the Flash object some time to unregister BEFORE your set the source of the iframe to an empty string (so the document unloads), then clear the iframe or it's parent container.

Though I remember from a previous project this drove us mad (the context being a single-page interface where videos were dynamically added and removed) and we resorted to writing our own Flash player fallback using the AS3 YT code. That's how annoying it got.


解决办法,在 iframe 页面中加入如下代码:
// 解决 IE9 下, iframe 中flash不能正常销毁的问题
// see http://stackoverflow.com/a/18453540
$(window).unload(function() {
  if (null != swfplayer) {
    try {
      swfplayer.stop2();
    }catch(e){}
  }

  $("#player").remove();
  $(window).remove();
});
分享到:
评论

相关推荐

    Iframe内存泄露分析

    Iframe 内存泄露分析是指在使用 Iframe 时,由于互相引用、闭包、跨页面泄漏、伪泄漏等原因,导致浏览器内存泄漏的问题。这种问题在 Ajax 盛行以前并不是什么大问题,因为都是通过页面跳转和刷新来进行与服务端的...

    flash嵌入iframe的例子

    在IT行业中,尤其是在Web开发领域,Flash和iframe的结合使用是一种常见的技术,特别是在过去的网页设计中,用于实现交互式内容的展示。本示例“flash嵌入iframe的例子”旨在教你如何将Flash(SWF文件)嵌入到HTML的...

    Flex中利用IFrame解决嵌入HTML时Flex组件被遮挡和IFrame被隐藏的问题

    遇到的典型问题主要有两个: 1. **Flex组件被遮挡**:由于Flex和HTML的渲染机制不同,当HTML内容被加载到IFrame中时,可能会覆盖Flex组件,导致菜单、弹出界面或右键菜单等不可见。解决这个问题的关键在于调整Z-...

    使用iframe在网页中嵌入其他网页的方法

    同时,`iframe`也有一些需要注意的点,比如跨域问题,如果嵌入的网页与主页面不在同一个域名下,可能会受到浏览器的同源策略限制。此外,`iframe`的使用也可能会对网页的性能和SEO产生影响,因为它们可能会导致额外...

    IE浏览器IFrame对象内存不释放问题解决方法

    标题中的“IE浏览器IFrame对象内存不释放问题解决方法”是指在使用Internet Explorer(IE)浏览器时,特别是在涉及IFrame对象的场景下,可能会遇到内存管理的问题。IFrame是一种可以在网页中嵌入其他HTML页面的元素...

    flex iframe 支持在flash中嵌套入html jsp asp php等

    flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex...

    iframe嵌入链接本地环境正常,正式环境重定向到登录解决

    ### iframe嵌入链接本地环境正常,正式环境重定向到登录问题解决方案 #### 问题背景 在开发过程中,经常需要将一个网页嵌入到另一个网页中,通常的做法是使用HTML中的`&lt;iframe&gt;`标签来实现这一功能。但在实际操作中...

    嵌入到HTML的iframe自动适应大小

    在探讨“嵌入到HTML的iframe自动适应大小”的主题时,我们主要关注的是如何使一个内嵌在HTML页面中的iframe元素能够根据其内容或者父容器的尺寸动态调整自身的高度,从而实现良好的响应式设计和用户体验。...

    div被iframe遮住的几种情况及解决方法

    在IE8中,当IFRAME内部嵌入video元素进行视频播放时,可能会导致外部元素的z-index层级设置失效,即不论外部元素的z-index值是多少,都会被IFRAME覆盖。解决这个问题的一个方法是在IFRAME的URL参数中添加wmode=...

    IFrame中Session丢失的解决办法

    然而,在IFrame(Inline Frame)环境中,Session的管理变得复杂,因为IFrame本质上是一个嵌入到主页面中的子窗口或框架,它可以加载来自不同源的网页。这种结构可能导致Session信息在IFrame与其父窗口或同一页面中的...

    safari,opera嵌入iframe页面cookie读取问题解决方法

    然而,由于浏览器的安全策略,特别是对于第三方cookie的处理,开发者可能会遇到在特定浏览器如Safari、Opera以及某些使用特定内核的搜狗浏览器中无法读取`iframe`内的cookie的问题。这个问题主要源于浏览器对第三方...

    js获取控制iframe中iframe的src

    js控制/获取a.html中iframe加载的b.html中的iframe,很多人都以为getElementById可以直接获取,其实不行的,以上代码就解决了这个问题,js控制iframe加载页面的iframe,不过测试只在IE和火狐通过,谷歌不行,其他自...

    iframe跨域常用问题和iframe页面自适应

    在网页开发中,`iframe`(Inline Frame)是一种非常实用的元素,它可以将一个完整的HTML文档嵌入到当前页面中,常用于实现页面组件化、加载外部内容或隐藏页面加载等场景。本篇文章将深入探讨两个关键知识点:`...

    js调用-嵌入iframe

    IFrame允许在单一网页中嵌入另一个网页,从而实现内容的复用或隔离。下面我们将详细探讨这一主题。 **1. IFrame基本概念** IFrame,全称为Inline Frame,它是一个可以在HTML文档中嵌入另一个HTML文档的元素。通过...

    iframe嵌入网页的一部分

    iframe嵌入网页的一部分, 拿别人网页为你所用

    完美解决iframe跨域问题

    3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...

    MFC ie webbrowser iframe/frame

    MFC封装了Windows API,使得开发者可以更高效地编写应用,而IE WebBrowser控件则是MFC中用于嵌入Web内容的一个组件。这个控件实际上是Internet Explorer的核心引擎,允许应用程序在自身界面内展示网页内容。 标题...

    [导入]Javascript获取IFrame内容(兼容IE&FF)

    在IE中,返回的是`HTMLDocument`的一个实现,即`ActiveXObject`。 以下是一段通用的代码示例,用于获取Iframe中的文本内容: ```javascript function getIFrameContent(iframeId) { var iframe = document....

Global site tag (gtag.js) - Google Analytics