重置iframe的窗口对象

时间:2018-11-15 20:39:01

标签: javascript html

我有一个iframe,未指定任何src。

我使用以下代码通过javascript动态更改内容:

let doc = Paste.render_iframe.contentWindow.document

doc.open()
doc.write(Paste.get_value())
doc.close()

哪个工作。但是唯一的问题是,如果以前使用过某些JavaScript,它将停留在window对象内,然后再次重新定义它们会导致错误。

我还没有找到一种方法来重置/替换iframe的窗口对象。

我之前所做的是创建一个新的iframe并替换旧的iframe。

我也可以尝试更改src,然后更改内容。

这些问题是,1)更换iframe似乎很昂贵,2)我必须处理竞争条件,必须检查iframe何时完全加载以接受新内容。

所以我的问题是,有没有一种方法可以替换或重置iframe的窗口对象而不替换它或修改src?

1 个答案:

答案 0 :(得分:0)

猜猜我将尝试动态更改src并等待load事件更改内容。

Paste.setup_render = function()
{
    Paste.render_iframe.addEventListener("load", function()
    {
        if(Paste.render_mode)
        {
            Paste.do_render()
        }
    })
}

Paste.reset_render_iframe = function()
{
    Paste.render_iframe.src = `about:blank?t=${Date.now()}_${Paste.get_random_string(4)}`
}

Paste.render = function()
{
    Paste.reset_render_iframe()
}

Paste.do_render = function()
{
    let doc = Paste.render_iframe.contentWindow.document

    doc.open()
    doc.write(Paste.get_value())
    doc.close()
}