我正在使用只有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函数。
答案 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");