2012-02-03 3 views
4

ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: второй блок кода работает - я просто пропустил URL-адрес.Как вставить динамический тег JavaScript в iframe

Я пытаюсь разместить динамически созданный скрипт в iframe. Я могу получить доступ к заголовку iframe, но он, похоже, не принимает запрос append. Вызов журнала консоли возвращает тег заголовка, и добавление текста в тело отлично работает. Я также попытался добавить тег сценария в тело. (примечание: тег сценария не находится в том же домене, поэтому я избегал использования getScript или ajax).

$(document).ready(function() { 
    $('<iframe></iframe>', { 
     name:"contentFrame" 
     ,id:"contentFrame" 
    }).css("height", 300).css("width", 500).load(function() { 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     script.src = "//cross-domain.com/script.js"; 
     console.log($(this).contents().find("head")); // outputs: [<head></head>] 
     $(this).contents().find("head").append(script); // doesn't work 
     $(this).contents().find("body").append(script); // doesn't work 
     $(this).contents().find("body").append("Test"); // works 
    }).appendTo("#content"); 
}); 

Вот новая версия, которая успешно дописывает сценарий, основанный на приведенных ниже предложения, но сценарий не оценивает (как проверена с помощью простого оповещения). Кроме того, еще одна странность: «рабочий» значок отображается около 15 секунд, а статус (в хроме) говорит «получение ...». В конце концов он останавливается, но ничего не происходит.

$(document).ready(function() { 
    $('<iframe></iframe>', { 
     name:"contentFrame" 
     ,id:"contentFrame" 
    }).css("height", 300).css("width", 500).load(function() { 
     var script = document.createElement("script"); 
     script.type = "text/javascript"; 
     script.src = "//cross-domain.com/script.js"; 
     console.log($(this).contents().find("head")); 
     $(this).contents().find("head")[0].appendChild(script); 
     $(this).contents().find("body").append("Test"); 
    }).appendTo("#content"); 
}); 

Update: Когда значок курсора наконец заканчивает работать (около 10 секунд, что странно, потому что это локальный сервер с одной строки кода), я получаю это сообщение в консоли Chrome (это всего красный с значок рядом с красным кружком «X»):

GET http://cross-domain.com/script.js 
(anonymous function)temp.html:16 
jQuery.event.dispatchjquery-1.7.1.js:3261 
jQuery.event.add.elemData.handle.eventHandlejquery-1.7.1.js:2880 
jQuery.fn.extend.appendjquery-1.7.1.js:5771 
jQuery.fn.extend.domManipjquery-1.7.1.js:5973 
jQuery.fn.extend.appendjquery-1.7.1.js:5769 
jQuery.each.jQuery.fn.(anonymous function)jquery-1.7.1.js:6162 
(anonymous function)temp.html:18 
jQuery.Callbacks.firejquery-1.7.1.js:1049 
jQuery.Callbacks.self.fireWithjquery-1.7.1.js:1167 
jQuery.extend.readyjquery-1.7.1.js:435 
DOMContentLoaded 

ответ

2

Смотрите этот ответ https://stackoverflow.com/a/3603496/220299

Это на самом деле может работать, но тег скрипт просто не видно.

+0

Значит, вы не можете использовать JQuery «append», но с использованием традиционных методов написания сценариев будет работать? – scader

0

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

$(document).ready(function() { 
    $('<iframe></iframe>', { 
     name:"contentFrame" 
     ,id:"contentFrame" 
    }).css("height", 300).css("width", 500).load(function() { 
     $(this).contents().find("head").append('<scr' + 'ipt type="text/javascript" src="//cross-domain.com/script.js"></scr' + 'ipt>'); 
    }).appendTo("#content"); 
}); 
+0

Это не сработало. – scader

Смежные вопросы