Скрипты не выполняются при изменении содержимого iframe с помощью innerHTML - PullRequest
4 голосов
/ 16 февраля 2010

Я хочу загрузить содержимое iframe с помощью JavaScript. Я не хочу менять src, но напрямую содержание с:

document.getElementById('frame').contentDocument.body.innerHTML = data;

Работает, но JavaScript в data не выполняется. Это защита или я что-то забыл?

Ответы [ 4 ]

3 голосов
/ 16 февраля 2010

Похоже, проблема не в iframe, а в том, что сценарии не выполняются при вставке в текст DOM с помощью innerHTML.

Возможно, вы захотите проверить следующее сообщение о переполнении стека для нескольких решений:

1 голос
/ 06 апреля 2011

Используйте это для получения кроссбраузера документов

//returns iframe document
function getIFrameDocument(iframe) {
    var doc;
    if (iframe.contentDocument) {//FF-Chrome
        doc = iframe.contentDocument;
    } else if (iframe.contentWindow) {
        doc = iframe.contentWindow.document;
    } else if (iframe.document) {//IE8
        doc = iframe.document;
    } else {
        doc = window.frames[iframe.id].document;
    }

    return doc;
}
0 голосов
/ 18 августа 2010

Будет работать что-то вроде следующего.

<iframe id = "testframe" onload = populateIframe(this.id);></iframe>

// The following function should be inside a script tag

function populateIframe(id) { 

    var text = "This is a Test"
var iframe = getObj(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else {
    doc = iframe.contentWindow.document; 
}

doc.body.innerHTML = text; 

  }
0 голосов
/ 16 февраля 2010

Попробуйте это

на странице index.html написать:

<script type="text/javascript">

    function init() 
    {
        var s = document.createElement("script");

        s.innerHTML="alert('ops');"    

        document.getElementById("frame").contentDocument.getElementsByTagName("body")[0].appendChild(s);
    }

    window.onload = init;
</script>

...

<body>
    <form id="form1">
    <div>
    <iframe id="frame" src="test.html"></iframe>
    </div>
    </form>
</body>

Затем просто напишите test.html как:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
</head>
<body>

</body>
</html>

и загрузите с веб-сервера index.html и код работает !!

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