You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox移除动态追加的iframe body内容问题求助

解决Firefox中iframe追加内容被自动移除的问题

这个问题我之前踩过坑!Firefox对空src的iframe处理逻辑和Chrome、Edge确实不一样,导致你追加的内容被莫名清空了。

问题原因

当你给iframe设置空src时,Firefox会自动触发加载about:blank页面,这个加载过程会重置iframe内部的整个DOM结构——你提前追加的内容还没来得及渲染,就被新加载的空白页面覆盖了。而Chromium系浏览器(Chrome/Edge)在这种场景下会直接允许操作iframe的内容,不会触发后续的页面重置,所以代码能正常运行。

解决方案

这里给你两种靠谱的解决办法,按需选择:

方案1:使用srcdoc属性直接注入内容

这是最简洁的方式,直接通过srcdoc把要插入的内容传给iframe,避免Firefox加载about:blank:

var contents = $('#editor').html();
// 直接在iframe的srcdoc里构建编辑器结构
var $iframe = $('<iframe/>', { 
    'class' : 'editor-iframe', 
    'srcdoc' : `<div class="editor" contenteditable="true">${contents}</div>`,
    'border': 0, 
    'height' : '100%', 
    'width' : '100%' 
});
// 把iframe添加到容器里
$('#your-target-container').append($iframe);

方案2:监听iframe的load事件后再操作DOM

如果需要兼容不支持srcdoc的老浏览器,就等iframe加载完成(也就是about:blank加载完毕)后,再往里面追加内容:

var $iframe = $('<iframe/>', { 
    'class' : 'editor-iframe', 
    'src' : '', 
    'border': 0, 
    'height' : '100%', 
    'width' : '100%' 
});

// 监听load事件,确保iframe内部DOM准备好再操作
$iframe.on('load', function() {
    var $iframe_editor = $('<div/>', { 'class': "editor" , 'contenteditable' : true });
    var contents = $('#editor').html();
    $iframe_editor.append(contents);
    // 这里要通过contentDocument访问iframe内部的文档对象
    $(this.contentDocument.body).append($iframe_editor);
});

$('#your-target-container').append($iframe);

小提示

  • 优先选方案1,代码更简洁,也符合现代浏览器的标准;
  • 方案2要注意:如果iframe的src后续有变化,load事件会再次触发,可能需要做防抖处理。

内容的提问来源于stack exchange,提问作者Xahed Kamal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:36:40