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

使用するjavascriptを動的にロードしてdocument.write()、必要な結果を取得することはできません。

動的にロードされたjavascriptは、DOMがロードされた後に実行されます。DOMがロードされた後にを使用するdocument.write()と、ドキュメント全体がクリアされ、新しい空のドキュメントが開始されます。このように、それはあなたが望むことをしません。

Javascriptを動的にロードする場合は、DOM操作(document.createElement()およびなどelem.appendChild())を使用してバナーを既存のDOMに挿入し、を使用しないようにする必要がありますdocument.write()document.write()このタイプの問題は、インラインで、または<script>マークアップ内のタグを介して(動的にロードされたjavascriptを介してではなく)順次ロードされたjavascriptを使用してインラインで実行される場合にのみ役立ちます。

于 2012-10-14T20:04:12.377 に答える
0

これを行うには、いくつかの方法があります。

  1. document.writeを返す代わりに、HTMLスニペットを返し、appendChildを使用してバナーを作成することができます。通常、document.writeを使用することは、JavaScriptの不適切な方法です。

  2. document.writeを使用する必要がある場合は、スクリプトタグurlを挿入するのではなく、URLからの応答をbanner_load関数に直接挿入します。

于 2012-10-14T19:52:18.680 に答える