2012-07-02 6 views
1

У меня есть этот код:Основы сценариев предварительной обработки

<script id="toModify" > 
Invalid javascript that will cause errors 
</script> 

<script> 
var s=document.getElementById("toModify"); 
s.innerHTML="alert('Hi')"; 
</script> 

И это не работает.

Я знаю, что есть по крайней мере две вещи, которые мне нужно сделать так, чтобы она работает:

  • Предотвратить первый скрипт для запуска в первый раз.
  • После изменения перезапустите первый скрипт.

Как я могу это сделать? Есть что-то еще, что мне нужно сделать?

+0

Можете ли вы рассказать нам, почему вы хотите/должны это сделать? Я уверен, что есть лучшее решение вашей исходной проблемы. – Bergi

ответ

1
  • Используйте атрибут type, чтобы браузер не выполняет скрипт:

    <script id="toModify" type="text/x-custom-whatever">...</script> 
    
  • Просто eval() код до его выполнения.

Конечно, динамически генерирующий код чреват опасностью; будьте очень осторожны, чтобы вы не вводили дыры в безопасности.

+0

Я принял ответ Gaby aka G. Petrioli, потому что он не использует 'eval'. Извините ... – Mageek

+0

@Mageek: Это не пример для объявления, но «eval» - это зло ». Существует абсолютная ** нулевая разница ** между использованием 'eval' и вставкой строки во вновь созданный элемент'

-1

Вы не можете. Первый скрипт всегда будет работать первым. Даже если у него есть атрибут defer, я не уверен, сможете ли вы изменить его содержимое.

См. Также this answer.

+0

Это неверно.Добавив непризнанный атрибут 'type', браузеры будут игнорировать содержимое блока'