谷歌出版商标签奖励广告意外地重新加载Mithril SPA



当我在本地主机服务器上运行此代码并单击#中的"显示广告"按钮时/奖励页面,奖励广告显示,但将我送回#/页面。然而,在这个在线代码编辑器中,这个SPA(单页应用程序(按预期工作:它播放广告,但让你留在奖励页面上。显然,这一定与应用程序在编辑器上的iframe中运行这一事实有关,但为什么我会得到"出乎意料的";在我的本地主机上的行为和";预期的";这些在线编辑器中的行为(我也在jsbin和jsfiddle中进行了测试,结果相同(。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
<script>
</script>
</head>
<body>
<div id="App"></div>
<script src="https://unpkg.com/mithril/mithril.min.js"></script>
<script>
window.googletag = window.googletag || {cmd: []};
googletag.cmd.push(() => {
googletag.enableServices();
googletag.pubads().addEventListener('rewardedSlotReady', event => event.makeRewardedVisible());
googletag.pubads().addEventListener('rewardedSlotClosed', event => googletag.destroySlots([event.slot]));
});
const Home = {
view: () => m('button', {
onclick: () => m.route.set('/reward')
}, 'Go to Reward Page >>>')
}
const Reward = {
view: () => [
m('button', {
onclick: () => m.route.set('/')
}, '<<< Return to Home Page'), 
m('button', {
onclick: () => googletag.cmd.push(() => {
const rewardedSlot = googletag.defineOutOfPageSlot('/22639388115/rewarded_web_example', googletag.enums.OutOfPageFormat.REWARDED);
if(rewardedSlot)
{
rewardedSlot.addService(googletag.pubads());
googletag.display(rewardedSlot);
}
})
}, 'Show Ad')
],
}
m.route(document.getElementById('App'), '/', {
'/': Home,
'/reward': Reward
});
</script>
</body>
</html>

UPDATE(2022.08.03 11:16(
我可以确认,通过将此代码放入子目录,然后在iframe中运行它,我可以获得预期的行为。我仍然需要理解为什么没有iframe它就不起作用。这里有一个Glitch页面,说明了这两种情况。单击预览窗格上的"查看"按钮,在其自己的窗口中查看它,并注意差异。

奖励广告的特定代码将#goog_rewarded附加到页面URL的末尾。这就是在使用默认#时迫使意外行为返回Mithril路由器的默认路由的原因!策略添加的#触发hashchange事件,Mithril无法解析路由。将m.route.prefix设置为不同的策略(在我的案例中为m.route.prefix = '?'(解决了问题,因为它阻止了查找的发生。

最新更新