Заставить iframe оценить свой javascript? - PullRequest
2 голосов
/ 07 марта 2012

Я динамически создаю iframe, и в какой-то момент мне нужно вставить в него javascript. Я могу просто добавить тег со строкой, но есть ли способ заставить iframe пересмотреть свои сценарии, чтобы javascript был исполняемым?

Простой пример того, что нужно сделать: пользователь предоставляет:

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

и

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

Мне нужно вставить html в тело iframe, и мне нужно вставить строку javascript в сценарии iframe таким образом, чтобы это работало.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

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");
}​

Вот скрипка .

1 голос
/ 07 марта 2012

Если вы измените onclick="doSomething();" на onclick="top.doSomething();, это будет работать.Потому что скопированный h2 выглядит как функция doSomething в текущем окне, а в iframe нет функции doSomething.

Если вы используете ключевое слово top, оно будет выглядеть в верхнем окне.В iframe это означает «искать родителя», а в «родителе» - «искать себя», и это будет работать и в родительском, и в iframeЕсли нет другого родителя, существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...