【问题标题】:Force iframe to evaluate its javascript?强制 iframe 评估其 javascript?
【发布时间】:2012-03-07 18:56:03
【问题描述】:

我正在动态创建一个 iframe,有时我需要将 javascript 插入其中。我可以用字符串添加标签就好了,但是有没有办法强制 iframe 重新评估它的脚本,以便 javascript 是可执行的?

需要做的简单例子是,用户提供:

<h2 onclick="doSomething();">Click me</h2>

function doSomething() { alert('you clicked me'); }

我需要将 html 推送到 iframe 的正文中,并且我需要将 javascript 字符串推送到 iframe 的脚本中,以使其能够正常工作。

【问题讨论】:

  • 你想如何从父窗口调用函数 doSomethinh() ?需要澄清。
  • 您可以在父窗口的 iframe 中创建一个函数,例如(假设 targetFrame 是 iframe id)document.getElementById('targetFrame').contentWindow.doSomething();
  • 抱歉,没有意识到我的帖子的格式不是我想要的,请再看一遍。
  • 我希望将 h2 标签推送到 iframe 主体中,然后从 iframe 中单击 h2 元素应该调用它的 javascript 函数,该函数也已被推送到 iframe 中。

标签: javascript iframe


【解决方案1】:

HTML

<!--Container of iframe, iframe will be appended to this div later-->

​<div id='myDiv'>​</div>​ 

JS

var iframe = document.createElement('iframe');
iframe.frameBorder = 1;
iframe.width = "500px";
iframe.height = "250px";
iframe.id = "iframe";

iframe.onload = function()
{
    var doc = iframe.contentDocument || iframe.contentWindow.document;
    var el = doc.createElement('h2');
    el.id="myH2";
    el.className="red";
    el.style.color="red";
    el.style.cursor="pointer";
    el.textContent = "Click me";
    el.onclick=doSomething;
    doc.body.appendChild(el);
}

document.getElementById("myDiv").appendChild(iframe);

function doSomething()
{
    alert("OK");
}​

这是fiddle

【讨论】:

    【解决方案2】:

    如果您将onclick="doSomething();" 更改为onclick="top.doSomething();,它将起作用。因为复制的 h2 在当前窗口上看起来 doSomething 函数,而在 iframe 中没有 doSomething 函数。

    如果您使用top 关键字,它将在顶部窗口中查找函数。在 iframe 中,这意味着寻找父级,在父级中寻找自己,它可以在父级和 iframe 中工作。除非没有另一个父级存在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多