Как динамически добавить функцию Javascript (и вызвать) - PullRequest
1 голос
/ 10 июня 2010

Основываясь на событии click на странице, через ajax я получаю блок html и script, я могу взять элемент script и добавить его к элементу head, однако браузеры на основе WebKit не рассматривают его как скрипт ( т.е. я не могу вызвать функцию, объявленную в прилагаемом скрипте).

Используя инструменты разработчика Chrome, я вижу, что мой узел сценария действительно существует, но он отображается иначе, чем блок сценария, который не добавляется динамически, в нединамическом сценарии есть дочерний текстовый элемент, и я не могу понять способ дублировать это для динамического сценария.

Есть идеи или лучшие способы сделать это? Движущей силой является то, что потенциально много HTML и сценариев, которые никогда не понадобятся, если пользователь не нажмет на конкретную вкладку, и в этом случае будет загружен соответствующий контент (и сценарий). Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Вы можете попробовать использовать jQuery ... он предоставляет метод с именем .getScript , который будет правильно загружать JavaScript динамически. И он прекрасно работает во всех известных браузерах.

1 голос
/ 10 июня 2010

Как насчет вызова eval() на контент, который вы получаете с сервера? Конечно, вы должны отрезать части <script> и </script>.

0 голосов
/ 10 июня 2010

Если вы используете библиотеку, такую ​​как jQuery, просто используйте встроенные методы для этого.

В противном случае вам нужно добавить его к документу, а не к заголовку, например:

document.write("<scr" + "ipt type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js\"></scr" + "ipt>");

Честно говоря, я понятия не имею, почему тег сценария так обрезается, но во многих примерах это делается, поэтому, вероятно, есть веская причина.

Вам также нужно будет учесть тот факт, что загрузка скрипта может занять довольно много времени, поэтому после добавления этого к телу вы должны установить таймер, который проверяет, загружен ли скрипт. Это может быть достигнуто простой проверкой typeof любой глобальной переменной, которую экспортирует скрипт.

Или вы можете просто сделать eval () для реального тела javascript, но могут быть некоторые предостережения.

В общем, я бы оставил подобные вещи в кэше браузера и просто загружал JavaScript на страницу, на которой находятся ваши вкладки. Просто старайтесь не использовать какие-либо события загрузки, а вызывайте любые инициализаторы, которые вам нужны, когда отображается вкладка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...