Google Closure Ajax Content - PullRequest
       10

Google Closure Ajax Content

0 голосов
/ 30 июня 2011

Как я могу отобразить HTML-содержимое XHR responseText в DIV, удалить его теги <script> и добавить их в тег head? (с помощью Google Closure)

Что-то вроде extractScripts в Prototype JS.

1 Ответ

0 голосов
/ 30 июня 2011

Если responseText - это целая веб-страница с тегами HTML и script, то, возможно, вам следует просто прикрепить ее к iFrame и iFrame src и позволить браузеру управлять всем этим вместо вас, а не помещать в DIV, где у вас естьдля управления различными частями веб-страницы.

Если вы действительно хотите получить responseText и поместить его непосредственно в div в своем собственном документе, тогда у вас есть пара вариантов.

Во-первых, если ответ является просто фрагментом HTML со встроенными тегами сценария (а не целой веб-страницей), то вы можете просто прочитать весь ответ в переменную JS и затем присвоить его атрибуту .innerHTMLваш DIV.Браузер будет анализировать HTML-код, включая встроенные теги, и оценивать его так, как если бы он изначально был частью этого блока (за исключением того, что время выполнения скрипта, очевидно, не наступает сразу после назначения .innerHTML.

какпример:

var myDiv = document.getElementById("myDiv");
myDiv.innerHTML = responseText;

Во-вторых, если есть какая-то причина, по которой вы хотите извлечь теги отдельно (и я не могу думать о такой причине по сравнению с первым вариантом), то вам придется проанализироватьначинайте и заканчивайте теги сценария из responseText самостоятельно, помещайте текст кода JS между ними в переменную JS и используйте eval для этой переменной, чтобы выполнить ее и сделать ее частью вашего документа. Затем присвойте оставшийся HTML-атрибут атрибуту innerHTML.вашего div, как в примере выше.

Если в этом скрипте есть document.write, это не сработает вторым способом, потому что нет контекста местоположения для document.write. Если эти скриптовые теги полагаются налюбые методы загрузки страницы, такие как onload, тогда сценарии также не будут видеть эти события (кроме случаев, когда этоiFrame.

...