0

次のように、ある種の広告ローテータを作成しようとしています。

<html>
<head>
    <title></title>
    <style>
        body {
            margin:0;
            padding:0;
        }
    </style>
    <script>
        function fillBoard() {
            s = document.getElementsByClassName('slots');
            board = document.getElementById('board');
            board.innerHTML = s[0].innerHTML
            alert(board.innerHTML);
        }
    </script>
</head>

<body>
    <div id="board" style="width:160px; text-align: center; margin:0">
    </div>

    <div class="slots" style="display:none">
        <!-- THE PROBLEM IS HERE -->
        <!-- Begin Hsoub Ads Ad Place code -->
        <script type="text/javascript">
            <!--
            hsoub_adplace = 1310003403401506;
            hsoub_adplace_size = '125x125';
             //-->
        </script>
        <script src="http://ads2.hsoub.com/show.js" type="text/javascript"></script>
        <!-- End Hsoub Ads Ad Place code -->
    </div>
    <div class="slots" style="display:none">
        <img src="http://lorempixel.com/160/90/sports/1/" />
    </div>

    <div class="slots" style="display:none">
        <img src="http://lorempixel.com/160/90/sports/2/" />
    </div>

    <div class="slots" style="display:none">
        <img src="http://lorempixel.com/160/90/sports/3/" />
    </div>

    <script>
        fillBoard();
    </script>
</body>

</html>

上記のコードでは:

  1. コンテンツを表示するボードとして機能するdivID を持つがあります。board
  2. ボードには、プロパティを使用divsして、クラス名を使用して他の非表示から提供されたデータを入力する必要があります。slotsinnerHTML
  3. 上記を行うには、名前付きの関数をページの head セクションで定義し、最後にタグfillBoard()を閉じる直前に呼び出します。</body>

何が起こっている?

非表示の divslotsは、画像を含む div で正常に機能します。ただし、最初の div には、機能しない広告ネットワークから広告を生成する JavaScript コードがあります。

広告ネットワークの JavaScript コードがその div をデータで埋める必要があることを期待しfillBoard()ますboard。しかし、これは起こりません!

この問題をどのように克服できるかを知る必要がありますか?

実際の例はここにあります

4

2 に答える 2

1

目的の非表示の div を表示するだけで、通常は DOM コンテンツをコピーするよりも優れた方法です。非表示の div を一度に 1 つだけ表示するようにすると、常に同じ場所に画像を表示できます。

"slots"最初の要素を表示するには、これを試してください:

s[0].style.display = 'block';
于 2013-10-29T14:19:00.647 に答える
1

わかりましたので、もう少し掘り下げた後、問題を見つけましたが、現時点では簡単な解決策はありません。

js ファイル show.js は、最初の「スロット」div に配置している iframe 内に広告コンテンツを生成しています。十分に単純です。ボードのコンテンツを最初のスロット クラスのコンテンツに設定すると、ボード div に iframe が作成されますが、同じコンテンツはありません。

セキュリティ上の理由から、iframe の innerHTML は、ページ ドメイン以外のドメインからのものである場合、iframe のコンテンツをコピーしないようです。

この時点での解決策は、Zhertalが提案したようにスロットdivを表示および非表示にするか、スロットdivのコンテンツをボードに物理的に移動する他の方法を見つけることができるようですが、これはまだ違反である可能性があります同じセキュリティ上の懸念。引き続き掘り下げていきます。他に何か見つかったら、この回答を編集します。

参照 SO 投稿: JavaScript を使用して IFrame の innerHTML を取得する

Javascript Iframe innerHTML

于 2013-10-29T15:00:08.697 に答える