如何通过src插入脚本标记和执行响应?

时间:2012-10-14 19:38:18

标签: javascript javascript-events

我有一个脚本标记,它通过src调用远程javascript片段,并将其写在页面上,从而在此过程中呈现横幅。

我正在寻找一种方法来调用脚本,或通过javascript插入脚本。现在它看起来像这样:

<div id="<?php print $banner_id; ?>" class="banner-responsive <?php print $breakpoints; ?>">
  <script src="<?php print $url; ?>"></script>
</div>

这是横幅供应商提供的首选方法。我正在寻找一种更实现它的方法:

<div class="banner">
  <div id="<?php print $banner_id; ?>">
    <script type="text/javascript">
      function banner_load(){
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = '<?php print $url; ?>';
        var x = document.getElementById('<?php print $banner_id; ?>');
        x.parentNode.appendChild(s);
      }
      if (window.attachEvent)
        window.attachEvent('onload', banner_load);
      else
        window.addEventListener('load', banner_load, false);
    </script>
  </div>
</div>

这种作品。它插入脚本标记,并调用远程URL。但它没有像在示例1中那样执行收到的JS片段,因此没有出现横幅。有没有办法让我随意执行脚本src?

src响应的样子:

document.write("<a target='_blank' href='http://domain/?options'><img src='http://domain/whateever-930x180px.jpg' alt='Click here' /></a>");

我想这样做,所以我可以根据预先定义的断点在特定时刻切换横幅。你们怎么会这样做?有什么想法吗?


更新:我对输出没有任何控制权。它是一个外部横幅供应商。我认为这是不可能的?

2 个答案:

答案 0 :(得分:1)

您无法动态加载使用document.write()的javascript并获得所需的结果。

动态加载的javascript在加载DOM后运行。在加载DOM后使用document.write()时,它会清除整个文档并启动一个新的空文档。因此,它不会做你想要的。

如果要动态加载Javascript,则需要使用DOM操作(例如document.createElement()elem.appendChild())将横幅插入现有DOM而不使用document.write()document.write()仅对此类问题有用,只需内联顺序加载的javascript内联或标记中的<script>标记(不是通过动态加载的javascript)。

答案 1 :(得分:0)

有几种方法可以做到这一点:

  1. 您可以返回HTML代码段,然后使用appendChild编写横幅,而不是返回document.write。通常使用document.write是一个糟糕的JavaScript实践。

  2. 如果您必须使用document.write,那么不要插入脚本标记网址,而是将网址的响应直接插入您的banner_load函数。