我正在开发一个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>发布于 2013-05-23 23:13:52
你可能有一个比赛条件,你正在输。
可能没有定义mraid,但这可能是可以的。
此外,我建议检查状态===是否‘正在加载’,而不是!= 'ready‘或规范所建议的。
事实上,“就绪”尽管是一个事件,但并不是一种官方状态。这很可能是你的问题。
发布于 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事件会被触发。因此,使用像本例这样的逻辑是一种最佳实践。
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-02-18 06:37:23
startAd()应在调用前初始化或使用指令声明,如: function startAd() { ... }
https://stackoverflow.com/questions/16699447
复制相似问题