在页面加载</script>上动态地将<script>标记插入HTML

时间:2010-06-24 21:32:26

标签: javascript jquery

我正在尝试使用Javascript动态插入Tweetmeme按钮。我目前正在整个网站上使用jQuery。这是我正在使用的脚本。我基本上想要通过一类日志条目循环遍历所有博客条目,并将以下JavaScript附加到最后。这个Javascript直接来自tweetmeme.com。这对我不起作用,它与append()之间的代码有关。它不喜欢第二组脚本标记。

<script type="text/javascript"> 
$(document).ready(function() {

$('.journal-entry').each(function(index) {
    $(this).append('<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script>');
   });

});
</script>

感谢任何帮助。 感谢。

2 个答案:

答案 0 :(得分:4)

不要这样做。

<script> HTML内容插入DOM是不可靠的:它在不同浏览器中的工作方式略有不同,jQuery无法保护您免受差异的影响。

特别是,编写innerHTML 永远不会导致<script>元素的内容执行,但随后将<script>元素从它移动到新父元素(这是jQuery的append进程的一部分)可能导致脚本执行,但并不总是(取决于浏览器)。

无论如何,它永远不会奏效,因为查看button.js,它正在调用document.write()。该函数仅在初始文档解析时调用是有意义的;如果您之后从事件中调用它,则该呼叫将简单地替换整个页面内容,从而破坏您现有的页面。调用document.write()的脚本只能 <script>元素的执行路径内从文档加载时运行。您根本不能将脚本包含在动态创建的内容中,因为它不是为它设计的。

(如果它让你感觉更好,它根本就没有设计; button.js脚本是一个严重破坏的旧垃圾,包括使用escape而不是正确的encodeURIComponent的不正确的网址转义1}} - 并且缺少HTML转义。远离这些完全白痴你可能会更好。)

答案 1 :(得分:2)

</script>来电中字符串中的结束append(...)正在关闭整体<script>

尝试将其拆分为两个字符串。 E.g:

$(this).append('<script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></'+'script>');
相关问题