1

我有一个脚本标签,它通过 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>");

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


更新:我无法控制输出。它是一个外部横幅供应商。我认为这是不可能的?

4

2 回答 2

1

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

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

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

于 2012-10-14T20:04:12.377 回答
0

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

  1. 您可以返回 HTML 片段,然后使用 appendChild 编写横幅,而不是返回 document.write。通常使用 document.write 是一种不好的 JavaScript 做法。

  2. 如果您必须使用 document.write,则不要插入脚本标签 url,而是将来自 url 的响应直接插入到您的banner_load函数中。

于 2012-10-14T19:52:18.680 回答