getScript или eval в определенном месте? - PullRequest
2 голосов
/ 20 ноября 2010

Мне было интересно, можно ли использовать eval (или некоторый вариант getScript jQuery) для позиционирования внешнего javascript в местах, отличных от конца DOM или в голове. Я пробовал:

var head = document.getElementById("fig"); 

вместо

var head = document.getElementsById("head")[0];

с

var script = document.createElement("script");
script.text = $(".code").val();
head.appendChild(script);

Но я не могу заставить его работать, несмотря ни на что. (Код работает, но Firebug показывает заменяемый код как в #fig, так и в конце страницы, прямо перед тегом </body>.

В основном инструментарий JavaScript, который я использую, выполняет рендеринг в зависимости от того, где находится тег script, и я пытаюсь динамически изменять javascript на основе пользовательского ввода (поэтому я не могу действительно ссылаться на new внешний файл JS - я бы предпочел запустить eval, что не идеально).

Полагаю, в худшем случае можно было бы сохранить пользовательский ввод в «новый» файл, используя PHP или что-то в этом роде, и использовать getScript, указывающий на этот новый файл PHP, но он выглядит крайне неудачно.

Еще раз спасибо!

1 Ответ

3 голосов
/ 20 ноября 2010

Использует ли "инструментарий JavaScript", на который вы ссылаетесь, document.write или document.writeln для вставки вывода на страницу? Если это так, вы можете переопределить эту функцию, чтобы добавить вывод скрипта в правильное местоположение:

document.write = function(s) {
    $('#fig').append(s);
};

document.writeln = function(s) {
    $('#fig').append(s + '\n');
};

, а затем загрузите и выполните сценарий, используя $.getScript.

Редактировать: Более надежный способ сделать это, в зависимости от того, как добавлен код:

var output = '';

document.write = function(s) {
    output += s;
};

document.writeln = function(s) {
    output += s + '\n';
};

$.getScript('URL of script here', function() {
    $('#fig').append(output);
});
...