Ответ 1
Добавление HTML в DOM не заставляет браузер оценивать теги script в указанном добавленном HTML.
Если вы действительно этого захотите, вы можете оценить javascript, используя eval()
:
eval($(this).find("script").text());
Я работаю с плагином, который является только 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.
Добавление HTML в DOM не заставляет браузер оценивать теги script в указанном добавленном HTML.
Если вы действительно этого захотите, вы можете оценить javascript, используя eval()
:
eval($(this).find("script").text());
Этот код работает в моем браузере.
$('body').append('<script>alert("test");<' + '/' + 'script>');
поэтому может быть, что $(this)
- это то, что на самом деле вызывает вашу проблему.
Вы можете заменить его на 'body'
и посмотреть, работает ли он так?
Я знаю, что это старый вопрос, но у меня была похожая проблема сегодня. Решение было использовать 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);
Одним из обходных путей в вашем случае может быть добавление поддельного изображения с событием onload:
<img src="blank.gif" onload="GA_googleFillSlot('blog_landing_right_rectangle_300x250')" />
Попробуйте:
s = '<' + 'script type="text-javascript">' +
'GA_googleFillSlot("blog_landing_right_rectangle_300x250");' +
'<' + '/' + 'script>';
$(this).append(s);
UPD: увы, это не сработает, используйте вместо этого решение wless1
так как вы находитесь в JavaScript, вы можете добавить, а затем выполнить код:
$(this).append('<div class="overlay-background">Advertisement</div>');
GA_googleFillSlot("blog_landing_right_rectangle_300x250");