如何在javascript追加</script>中执行<script>代码

时间:2013-01-11 00:09:50

标签: javascript jquery html javascript-events nextgen-gallery

我正在使用只有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函数。

6 个答案:

答案 0 :(得分:11)

将HTML附加到DOM中不会导致浏览器评估所述附加HTML中的任何脚本标记。

如果您真的想,可以使用eval()评估javascript:

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

答案 1 :(得分:4)

此代码适用于我的浏览器。

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

因此$(this)可能是导致您出现问题的原因。

可以用'body'替换它,看看它是否有效?

答案 2 :(得分:2)

我知道这是一个老问题,但是今天我也遇到了类似的问题。 解决方案是使用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);

答案 3 :(得分:1)

您的案例中的一种解决方法可能是使用onload事件附加假图像:

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

答案 4 :(得分:0)

请尝试:

s = '<' + 'script type="text-javascript">' +
    'GA_googleFillSlot("blog_landing_right_rectangle_300x250");' +
    '<' + '/' + 'script>';
$(this).append(s);
UPD:唉,这不行,请改用wless1的解决方案

答案 5 :(得分:0)

由于您使用的是JavaScript,因此您可以添加并执行代码:

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

GA_googleFillSlot("blog_landing_right_rectangle_300x250");