Java 在HTML广告中实现MRaid.js

Java 在HTML广告中实现MRaid.js,java,javascript,html,ios,mraid,Java,Javascript,Html,Ios,Mraid,我正在开发一个iOS应用程序,用于显示与MRAID兼容的横幅广告。我对它进行了研究,几乎没有样本可供使用。我已成功地将mraid.js文件链接到HTMl代码中。我在这里面临的问题是,广告加载后不久,我不会触发任何状态更改事件。这是我的示例HTML代码。我在同一个文件夹中还有mraid.js文件 在下面的代码中,我正在侦听StateChange事件。但即使在加载广告后,也不会触发该事件。我对编写HTML/Js是新手。有什么地方我错了吗?如果我在什么地方错了,有人能纠正我吗 谢谢 <!DOCT

我正在开发一个iOS应用程序,用于显示与MRAID兼容的横幅广告。我对它进行了研究,几乎没有样本可供使用。我已成功地将mraid.js文件链接到HTMl代码中。我在这里面临的问题是,广告加载后不久,我不会触发任何状态更改事件。这是我的示例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>

if(mraid.getState()!='ready'){
mraid.addEventListener(“状态更改”,函数(状态){
如果(状态==‘默认’){
警报(“状态更改”);
startAd();
}
});
}否则{
startAd();
}
var startAd=函数(){
警报(“启动广告”);
mraid.useCustomClose(true);
}

您可能有一个正在进行的比赛状态,您正在输球

可能mraid没有定义,但这可能没问题

此外,我建议检查状态==='loading'而不是!='“准备好”或规范建议的

事实上,“准备就绪”虽然是一个事件,但并不是一个官方状态。这很可能是您的问题。

startAd()应该在调用之前初始化,或者使用指令声明,例如: 函数startAd(){…}

下面是以下示例:

建议尽快定义mraid.js-也许可以把它放在头上:

还应注意以下文件:

从MRAID.addEventListener开始准备,如下所示。放 displayAd或类似初始化中的其余MRAID代码 功能。在使用任何MRAIDAPI之前,状态必须为“就绪”。 如果不遵守此要求,则可能导致不可预测的故障 当广告试图使用尚未实现的MRAID功能时 对它可用。有时,ready事件会在 creative有机会注册一位听众。因此使用 像这个例子这样的逻辑代表了一种最佳实践


谢谢你的意见,约翰。我也尝试了state==='loading',但没有成功。这里的问题是stateChange事件没有在mraid.js文件中广播。我非常确定mraid JS文件被注入到HTML文件中,这样当页面最初加载时,我会得到当前状态为“正在加载”。最终解决了问题。当页面加载时,mraid.js不会触发自身的事件。Statchange事件必须由SDK在外部调用(在我的例子中是UIwebView的委托方法-didFinishLoad)。
function showMyAd() { 
    ... 
} 

if (mraid.getState() === 'loading') { 
    mraid.addEventListener('ready', showMyAd); 
} else { 
    showMyAd(); 
}
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;
}