在HTML广告中实施MRaid.js

时间:2013-05-22 18:48:24

标签: java javascript html ios mraid

我正在开发一款iOS应用,用于显示兼容MRAID的横幅广告。我对它进行了研究,并且只有很少的样本可供使用。我已成功将我的mraid.js文件链接到我的HTMl代码中。我在这里面临的问题是广告加载后不久,我没有触发任何Statechange事件。这是我的示例HTML代码。我也在同一个文件夹中有mraid.js文件。

在下面的代码中,我正在侦听StateChange事件。但即使在广告加载后,事件也不会被触发。我是编码HTML / Js的新手。有什么地方我错了吗?如果我在某个地方错了,任何人都可以纠正我。

谢谢,

<!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 个答案:

答案 0 :(得分:1)

你可能会遇到失败的竞争状况。

可能 mraid 未定义,但这可能没问题。

此外,我建议检查状态==='加载'而不是!='准备好'或规格建议。

事实上,尽管是一个事件,“准备好”并不是一个官方国家。这很可能是你的问题。

答案 1 :(得分:1)

The MRAID Best Practices建议尽快定义mraid.js - 可能会把它放在头脑中:

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

另请注意此文档:

  

从MRAID.addEventListener开始准备就绪,如下所示。放   displayAd中的其余MRAID代码或类似的初始化   功能。在使用任何MRAID API之前,状态必须“准备好”。   未能遵守此要求可能会导致无法预料的故障   广告尝试使用尚未使用的MRAID功能时   可用。偶尔会在事件发生之前触发就绪事件   creative有机会注册听众。因此使用   像这个例子的逻辑代表了一种最佳实践。

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;
}

答案 2 :(得分:0)

startAd()应在调用之前初始化或使用指令声明,如: function startAd(){...}

答案 3 :(得分:0)

以下是MRAID 2.0 spec的示例:

function showMyAd() { 
    ... 
} 

if (mraid.getState() === 'loading') { 
    mraid.addEventListener('ready', showMyAd); 
} else { 
    showMyAd(); 
}