Есть ли способ, кроме как использовать eval / handleAs: «javascript» для динамического извлечения сценариев (через XMLHttpRequest) - PullRequest
1 голос
/ 24 октября 2011

Здесь Я задал вопрос, касающийся исключений, возникающих при динамической загрузке сценариев через XMLHttpRequest (другими словами, при выполнении через eval)

В связанном вопросе я хотелзнать, считается ли загрузка скриптов динамически как таковая плохой практикой с самого начала.В моем конкретном случае у меня есть элемент HTML Canvas, и вместо того, чтобы загружать все возможные фигуры, я хочу извлекать их динамически, без перезагрузки страницы, и выполнять их по возвращении.Проблема, с которой я столкнулся, заключается в том, что если код, связанный с этой формой, неверен, отображаемое сообщение об ошибке не очень полезно (указывает на расположение оператора eval, а не на неправильный оператор).Есть ли другой способ динамически получать код с сервера и выполнять его, при этом лучше информируя о местонахождении исключения, когда оно происходит.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Если вы хотите загрузить скрипт, используйте элемент <script>. Если вы хотите динамически загрузить скрипт, динамически создайте элемент <script>.

var script = document.createElement('SCRIPT');
script.src = "<url to load>";
document.getElementsByTagName("HEAD")[0].appendChild(script);

Не гарантируется синхронность, как eval с синхронным XHR, но в идеале вы должны структурировать свой код так, чтобы использовать асинхронность.

1 голос
/ 24 октября 2011

Добавление к ответу Майка, если вам нужна хорошая поддержка отладчика, включая тег сценария, вероятно, является подходящим вариантом, поскольку именно для этого отладчики привыкли работать. Основные отличия от eval, о которых вам нужно знать:

  • Eval запускается в области, в которой он вызывается, в то время как включенные теги сценария выполняются в глобальной области.
  • Eval является синхронным, в то время как включенные теги работают асинхронно. (Вам нужно будет использовать что-то вроде JSONP и dojo.io.script , если вам нужно запустить код после завершения тега script).

Если сценарии исправлены, вы также можете рассмотреть возможность их отладки, включив теги сценариев и развернув их по своему усмотрению.

...