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