首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HTML Ads中实现MRaid.js

在HTML Ads中实现MRaid.js
EN

Stack Overflow用户
提问于 2013-05-23 02:48:24
回答 4查看 8.6K关注 0票数 1

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

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

谢谢,

代码语言:javascript
复制
<!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>
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-05-23 23:13:52

你可能有一个比赛条件,你正在输。

可能没有定义mraid,但这可能是可以的。

此外,我建议检查状态===是否‘正在加载’,而不是!= 'ready‘或规范所建议的。

事实上,“就绪”尽管是一个事件,但并不是一种官方状态。这很可能是你的问题。

票数 1
EN

Stack Overflow用户

发布于 2014-12-30 03:41:58

The MRAID Best Practices建议尽快定义mraid.js --也许把它放在头上:

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

还请注意此文档:

使用MRAID.addEventListener作为

开始,如下所示。将剩余的MRAID代码放入displayAd或类似的初始化函数中。在使用任何MRAID API之前,状态必须为“ready”。如果不遵守此要求,则当ad尝试使用尚不可用的MRAID功能时,它将面临不可预测的失败风险。有时,在创意人员有机会注册监听器之前,ready事件会被触发。因此,使用像本例这样的逻辑是一种最佳实践。

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2014-02-18 06:37:23

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16699447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档