Имею многокадровую раскладку. Один из фреймов содержит форму, которую я отправляю через XMLHttpRequest. Теперь, когда я использую document.write () для перезаписи фрейма с формой, а новая страница, которую я добавляю, содержит любой javascript, тогда javascript не выполняется в IE6?
Например:
document.write("<html><head><script>alert(1);</script></head><body>test</body></html>");
В приведенном выше случае содержимое страницы заменяется тестом, но alert () не выполняется. Это отлично работает в Firefox.
Как можно обойти указанную выше проблему?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Обходной путь - программно добавить блоки <script> в заголовок элемента DOM в JavaScript с помощью функции обратного вызова или вызвать метод eval (). Это единственный способ заставить это работать в IE 6.
Другая возможная альтернатива - использовать JSON, динамически добавляя ссылки на скрипты, которые будут автоматически обрабатываться браузером.
Ваше здоровье.
Вкратце: вы действительно не можете этого сделать. Однако библиотеки JavaScript, такие как jQuery, предоставляют именно эту функциональность. Если вы зависите от этого, попробуйте jQuery.
Оценка и / или динамическое выполнение скриптов - плохая практика. Очень плохая практика. Очень, очень, очень плохая практика. Не могу не подчеркнуть, насколько это плохая практика.
AKA .: Похоже на плохой дизайн. Какую проблему вы снова пытаетесь решить?
Вместо того, чтобы открывать JS-код, заключите его в функцию (назовем ее «doIt»). Окно вашего фрейма (допустим, его имя - formFrame) имеет родительское окно (даже если оно не отображается), в котором вы можете выполнять код JS. Выполните фактическую операцию перезаписи кадра в этой области:
window.parent.rewriteFormFrame(theHtml);
Где функция rewriteFormFrame в родительском окне выглядит примерно так:
function rewriteFormFrame(html) {
formFrame.document.body.innerHTML = html;
formFrame.doIt();
}
Вы можете использовать атрибут onload в теге тела (<body onload = "jsWrittenLoaded()">).
Не могли бы вы объяснить это поподробнее? Не думаю, что это сработает, но, возможно, я просто не понимаю, что вы предлагаете.