我正在开发一款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>
答案 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();
}