Как выполнить код <script> в javascript append

Я работаю с плагином, который является только Javascript. Мне нужно, чтобы он динамически создавал элемент DIV с рекламой в нем.

Я не могу понять, почему это не работает:

$(this).append('<div class="overlay-background">Advertisement

     <script type="text-javascript">

          GA_googleFillSlot("blog_landing_right_rectangle_300x250");

     </script>'

В результате получается элемент, созданный с помощью "Hello World", но он не выполняет функцию GA-googleFillSlot.

Ответ 1

Добавление HTML в DOM не заставляет браузер оценивать теги script в указанном добавленном HTML.

Если вы действительно этого захотите, вы можете оценить javascript, используя eval():

eval($(this).find("script").text());

Ответ 2

Этот код работает в моем браузере.

$('body').append('<script>alert("test");<' + '/' + 'script>');

поэтому может быть, что $(this) - это то, что на самом деле вызывает вашу проблему.

Вы можете заменить его на 'body' и посмотреть, работает ли он так?

Ответ 3

Я знаю, что это старый вопрос, но у меня была похожая проблема сегодня. Решение было использовать createContextualFragment.

Мой код выглядит примерно так:

var tagString = '<script async type="text/javascript" src="path_to_script"></script>';

var range = document.createRange();
range.selectNode(document.getElementsByTagName("BODY")[0]);
var documentFragment = range.createContextualFragment(tagString);
document.body.appendChild(documentFragment);

Ответ 4

Одним из обходных путей в вашем случае может быть добавление поддельного изображения с событием onload:

<img src="blank.gif" onload="GA_googleFillSlot('blog_landing_right_rectangle_300x250')" />

Ответ 5

Попробуйте:

s = '<' + 'script type="text-javascript">' +
    'GA_googleFillSlot("blog_landing_right_rectangle_300x250");' +
    '<' + '/' + 'script>';
$(this).append(s);

UPD: увы, это не сработает, используйте вместо этого решение wless1

Ответ 6

так как вы находитесь в JavaScript, вы можете добавить, а затем выполнить код:

$(this).append('<div class="overlay-background">Advertisement</div>');

GA_googleFillSlot("blog_landing_right_rectangle_300x250");