2012-03-07 61 views
2

我正在动态创建一个iframe,并且在某些时候我需要向其中插入javascript。我可以添加标签的字符串很好,但有没有办法强制iframe重新评估其脚本,所以JavaScript是可执行的?强制iframe评估其javascript?

的需要做什么

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

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

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

我需要将HTML推入iframe的身体,我需要推将JavaScript字符串转换为iframe中的脚本,以使其可以工作。

+0

如何从父窗口调用函数doSomethinh()?需要澄清。 – 2012-03-07 19:01:04

+0

你可以在父窗口中的iframe中使用一个函数(假设targetFrame是iframe id)document.getElementById('targetFrame')。contentWindow.doSomething(); – 2012-03-07 19:04:25

+1

对不起,没有意识到我的帖子没有格式化我想要的内容,请再看一遍。 – CDelaney 2012-03-07 19:23:45

回答

1

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

如果您使用top关键字,它将在顶部窗口中显示功能。在iframe中,这意味着寻找父母,并在父母寻找自我,并将在父母和iframe中工作。除非没有其他父母存在。

2

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