【问题标题】:How to execute <script> code in a javascript append如何在 javascript append 中执行 <script> 代码
【发布时间】:2012-12-25 12:41:42
【问题描述】:

我正在使用一个只有 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 页面中使用此代码吗?如果是这样,关闭 可以被视为最外层 的结束标记

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


【解决方案1】:

由于您使用的是 javascript,因此您可以附加然后执行代码:

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

GA_googleFillSlot("blog_landing_right_rectangle_300x250");

【讨论】:

    【解决方案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】:

      在您的情况下,一种解决方法可能是附加一个带有 onload 事件的假图像:

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

      【讨论】:

        【解决方案4】:

        此代码在我的浏览器中有效。

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

        所以$(this) 可能是真正导致您的问题的原因。

        你能用'body'替换它,看看它是否可以这样工作吗?

        【讨论】:

        • 这对我有用,如果你打破字符串...&lt;/' + 'script&gt;');中的&lt;/script&gt;
        • 谢谢,我忘记了将脚本写入脚本,因为我通常将它们放入文件中。
        【解决方案5】:

        请尝试:

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

        UPD:唉,这不行,请改用 wless1 的解决方案

        【讨论】:

        • 这无济于事,因为脚本无论如何都不会运行。
        【解决方案6】:

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

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

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

        【讨论】:

        • 此解决方案在与 $(this).append 一起放置时会导致未知的白屏错误。当放置在它之外时,它不会产生任何变化。我没有修改上面显示的代码。
        • 在 pubads.g.doubleclick.net 上看起来有几十个错误请求。看起来我正在循环添加(NextGEN 画廊轮播)。
        猜你喜欢
        • 2020-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        相关资源
        最近更新 更多