1

MRAID 互換のバナー広告を表示するための iOS アプリを開発しています。私はそれについて調査しましたが、使用するサンプルはほとんどありませんでした。mraid.js ファイルを HTMl コードに正常にリンクしました。ここで直面している問題は、Ad がロードされた直後に Statechange イベントがトリガーされないことです。これが私のサンプルHTMLコードです。同じフォルダーに mraid.js ファイルもあります。

以下のコードでは、StateChange イベントをリッスンしています。しかし、広告が読み込まれた後でもイベントはトリガーされません。HTML/J のコーディングは初めてです。私が間違っているところはありますか?私がどこかで間違っている場合は、誰でも私を修正してください。

ありがとう、

<!DOCTYPE html>
<html>
    <body>
        <script type="text/javascript" src="mraid.js"> </script>
        <script>
            if (mraid.getState() != 'ready') {
                mraid.addEventListener("stateChange", function(state) {
                                       if (state == 'default') {
                                       alert ("State Changed");
                                       startAd();
                                       }
                                       });
            } else {
                startAd();
            }


            var startAd = function() {
                alert ("Start Ad");
                mraid.useCustomClose(true);
            }

            </script>


        <iframe src="http://files.bannersnack.com/iframe/embed.html?hash=bd1ksct1&bgcolor=%23000000&wmode=opaque&clickTag=http%3A%2F%2Fwww.somewebsite.com&t=1369101780" width="728" height="90" seamless="seamless" scrolling="no" frameborder="0" allowtransparency="true"></iframe>
    </body>
</html>
4

4 に答える 4

1

負けている競合状態が発生している可能性があります。

mraidが定義されていない可能性がありますが、おそらく問題ありません。

さらに、状態 === 'ready' または仕様が示唆するものではなく、状態 === 'loading' であることを確認することをお勧めします。

実際、イベントであるにもかかわらず、「準備完了」は公式の状態ではありません。それはおそらくあなたの問題です。

于 2013-05-23T15:13:52.217 に答える
1

MRAID のベスト プラクティスでは、できるだけ早く mraid.js を定義することを推奨しています。

<html> <head> <script src="mraid.js"></script>

次のドキュメントにも注意してください。

以下に示すように、準備のために MRAID.addEventListener から始めます。残りの MRAID コードを displayAd または同様の初期化関数に入れます。MRAID API を使用するには、状態が「準備完了」である必要があります。この要件を守らないと、広告がまだ利用できない MRAID 機能を使用しようとしたときに、広告で予期しない障害が発生する危険があります。場合によっては、クリエイティブがリスナーを登録する前に、ready イベントが発生することがあります。したがって、この例のようなロジックを使用することは、ベスト プラクティスを表しています。

function init() {
  var success = false;
  if (document.readyState === 'complete') {
    if (typeof mraid !== 'undefined') {
      if (mraid.getState() === 'loading') {
      mraid.addEventListener('ready', displayAd);
      } else if (mraid.getState() === 'default') {
      displayAd();
      }
      success = true;
    }
  }
  return success;
}
于 2014-12-29T19:41:58.260 に答える
0

MRAID 2.0 仕様の例を次に示します。

function showMyAd() { 
    ... 
} 

if (mraid.getState() === 'loading') { 
    mraid.addEventListener('ready', showMyAd); 
} else { 
    showMyAd(); 
}
于 2014-02-17T22:41:54.883 に答える