当我在本地主机服务器中运行这段代码并单击#!/reward页面中的Show按钮时,奖励广告会显示,但会将我发送回#!/页面。然而,在这个在线代码编辑器中,这个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>
更新 (2022.08.03 11:16)
我可以通过将代码放在子目录中,然后在iframe中运行它来确认这一点,这样就可以得到预期的行为。我还得弄明白为什么没有iframe就不行了。下面是一个说明这两种情况的小故障页面。单击预览窗格上的“视图”按钮,在其自己的窗口中查看它,并注意其差异。
发布于 2022-08-04 15:16:59
奖励广告的特定代码将#goog_rewarded附加到页面URL的末尾。这就是在使用默认#时迫使意外行为返回到Mithril的路由器的默认路由的原因!策略。添加的#触发一个hashchange
事件,Mithril无法解析该路由。将m.route.prefix
设置为不同的策略(在我的例子中是m.route.prefix = '?'
)可以解决问题,因为它阻止查找发生。
https://stackoverflow.com/questions/73223369
复制相似问题