Как я могу добавить и выполнить скрипт внутри iframe кросс-браузерным способом (особенно IE!)? - PullRequest
3 голосов
/ 16 июня 2010

Справочная информация: мне нужно загрузить рекламные сценарии после загрузки DOM.Поскольку многие из сценариев используют document.write () и другие потенциально плохие функции для запуска после загрузки DOM, я хочу загрузить сценарии внутри iframe.

Поэтому, когда нужно показать объявление,запускается событие, которое выполняет следующие действия:

        var iframe = document.createElement('iframe');
        iframe.setAttribute('id', 'iframeId');
        iframe.setAttribute('src', 'about:blank');

        var adContainer = document.getElementById('AdContainer');
        adContainer.appendChild(iframe);

        var val = '<html><head></head><body>';
        val += '<scr' + 'ipt type="text/javascript" src="' + url + '"></scr' + 'ipt>';
        val += '</body></html>';

Если я не назначаю теги html и body для val, скрипт автоматически добавляется в заголовок iframe и не выполняется в FF.В IE скрипт не выполняется с или без тегов head / body / html.

        var doc = iframe.contentWindow || iframe.contentDocument;

        if (doc.document){
            doc = doc.document
        }

        doc.open();
        doc.write(val);
        doc.close();

Я нашел этот последний бит кода здесь: Почему добавляется кдинамически создаваемый .Я НЕ хочу загружать jquery в iframe, я просто хочу добавить скрипт и выполнить его.

Мое текущее решение отлично работает в FF и Webkit.Однако IE не выполняет скрипт.Сценарий записывается на страницу, но не запускается.Есть ли лучший способ добавить скрипт в iframe, чтобы он работал через браузер?Или можно сказать IE запустить скрипт?

Я знаю, что могу загрузить внешний документ с помощью рекламного сценария через iframe, но я не хочу делать дополнительный вызов на мой сервер, если я могу сделать это динамически.Кроме того, я попытался использовать appendChild () в теле iframe для вставки сценария, но поскольку элемент script создается вне DOM iframe, похоже, это не работает.

Ответы [ 2 ]

1 голос
/ 13 июля 2011

IE нужно defer="true" в теге скрипта, когда он должен выполняться динамически.

0 голосов
/ 16 июня 2010

Если у кого-то нет идей получше, я нашел одно решение, хотя и неидеальное.

Согласно очень полезному комментарию Майкла Клебера: Почему этот JavaScript (с использованием document.open и document.write) не работает в Internet Explorer или Opera? , вызывая

document.close() 

повесит все скрипты в IE. Простое пропускание этой строки заставляет скрипт выполняться. Я бы предпочел решение, которое не предполагает оставление документа iframe открытым, поскольку я не знаю, какие последствия это может повлечь за собой.

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