Как мне запустить JavaScript, созданный с помощью document.write ()?

Имею многокадровую раскладку. Один из фреймов содержит форму, которую я отправляю через XMLHttpRequest. Теперь, когда я использую document.write () для перезаписи фрейма с формой, а новая страница, которую я добавляю, содержит любой javascript, тогда javascript не выполняется в IE6?

Например:

document.write("<html><head><script>alert(1);</script></head><body>test</body></html>");

В приведенном выше случае содержимое страницы заменяется тестом, но alert () не выполняется. Это отлично работает в Firefox.

Как можно обойти указанную выше проблему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
1 777
6

Ответы 6

Обходной путь - программно добавить блоки <script> в заголовок элемента DOM в JavaScript с помощью функции обратного вызова или вызвать метод eval (). Это единственный способ заставить это работать в IE 6.

Другая возможная альтернатива - использовать JSON, динамически добавляя ссылки на скрипты, которые будут автоматически обрабатываться браузером.

Ваше здоровье.

Не могли бы вы объяснить это поподробнее? Не думаю, что это сработает, но, возможно, я просто не понимаю, что вы предлагаете.

SpoonMeiser 01.10.2008 02:09

Вкратце: вы действительно не можете этого сделать. Однако библиотеки 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()">).

Другие вопросы по теме