Замена скрипта src с помощью jquery не выполнена - PullRequest
2 голосов
/ 09 февраля 2010

Я хотел бы заменить исходный URL скрипта на лету, чтобы ускорить только этапы разработки, так что нет фактического использования. Этот вид замены хорошо работает с CSS или изображениями. Но есть трудное время, чтобы заставить его работать с JavaScript. Сценарий, кажется, не выполняется, хотя загружается через src.

Вот что я сделал.

..................
  return this.each(function() {
    $(this).click(function() {
    var t = $(this);
    options.newVal = t.val();
    var absUrl = '/root_path_still_within_the_same_domain/';
    //options.oldVal is just to limit the replacement scope
    var oldJsUrl = absUrl + options.oldVal + '.js';
    var newJsUrl = absUrl + options.newVal + '.js';

    var reJsUrl = $('script[type*=javascript][src*=' + options.oldVal + ']' || 'script[type*=javascript][src*=' + options.newVal + ']');

        if (oldJsUrl.length && options.oldVal.length) {
          reJsUrl.attr('src', newJsUrl);
        }

        options.oldVal = options.newVal;

    });
  }); 

......................

В Firebug целевой старый URL-адрес src (/old_path_to_file.js) заменяется новым (/new_path_to_file.js). Так что замена работает. Но он сообщает, (см. Реальный абсолютный URL http://, в случае необходимости):

Не удалось загрузить источник для: http://localhost/........js

Таким образом, скрипт src заменен, но не выполнен. Что-нибудь, что я пропустил, если это все равно разрешено?

Я также пытался использовать $ .getScript (absUrl + options.newVal + '.js'); но это не заменяет старый src, а просто добавляет больше js в dom, а это не то, что я хочу. Любой намек на эту часть тоже?

Спасибо за всевозможную помощь.

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

Если вы просто хотите включить другой скрипт:

var script = document.createElement("script");
script.src = url; //Specify url here
script.type = "text/javascript";
$("body").append(script);

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

0 голосов
/ 09 февраля 2010

Хотите "заменить" старый скрипт? То есть javascript, который был загружен с тегом script, больше не находится в памяти, а новый javascript есть? Вы не можете сделать это таким образом. Вы должны удалить и отсоединить событие, предварительно сформированное оригинальными сценариями.

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