我在 https://howtodiscuss.com 的 Discourse 网站上运行广告时遇到了很多问题。
- 出现大量未捕获的 DOM 异常错误,只需以无痕模式访问任何话题页面即可看到,例如:https://howtodiscuss.com/t/profit/7022
-
另一个错误是,当我从旧话题页面导航到新话题页面时,控制台会出现此警告。虽然会显示 Google Vignette 广告,但由于该警告,广告会消失且页面会跳转,导致用户永远无法点击页面加载/导航之间出现的 Google Vignette 插页式广告。
弃用通知:一次性移除所有事件监听器已被弃用,请单独移除每个监听器。How many ounces is a 1 4 cup - How To Discuss
- 我还尝试在单个话题页面的右侧边栏显示固定的 Google 广告,使用了以下代码:
JavaScript 代码用于在话题侧边栏插入固定广告,需要使其与目录(ToC)兼容
<!-- 显示固定广告的插件代码 -->
<script type = "text/discourse-plugin"
version = "0.8" >
var friends_retries = 0;
var friends_timeout;
api.decorateWidget('topic-timeline-container:before', helper => {
return helper.h('div.side-block', [
helper.rawHtml('<div id="friends"></div>'),
]);
});
api.onPageChange(() => {
if (window.location.href.indexOf("/t/") > -1) {
console.log('page changed - topic');
friends_retries = 0;
window.setTimeout(loadFriends, 100);
} else {
//console.log( 'page changed - not topic');
}
});
function loadFriends() {
if (!document.getElementById('friends')) {
//var timer;
friends_retries++;
if (friends_retries < 10) {
//console.log('timeout rescheduled, try ' + friends_retries);
window.setTimeout(loadFriends, 100);
} else {
clearTimeout(friends_timeout);
// window.clearTimeout(loadFriends);
console.log('timeout cleared, gave up');
// loadFriends();
}
} else {
var bHTML = ' <!-- Topic side bar timeline HTD --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-7087907313091932" data-ad-slot="5067761793" data-ad-format="auto" data-full-width-responsive="true"></ins>';
// var bHTML = '<img src="https://via.placeholder.com/300x250?text=300x250+MPU" alt="Girl in a jacket">';
$("#friends").html(bHTML);
}
}
</script>
<!-- 显示固定广告的插件代码 -->
以下是其 CSS 代码:
/* 用于固定广告 */
/* 时间线布局修复 2.6.0.beta5 */
@media screen and (min-width: 925px) {
.container.posts .topic-navigation {
margin-left: 7em;
}
}
#friends {
display:block;
//width:300px;
height:150px;
margin-left:-90px;
margin-top:-25px;
margin-bottom:90px;
}
/* 用于固定广告 */
有时这段代码可以工作,但在出现目录(ToC)的页面上无法工作,例如在 How Many Grams In A Quarter Ounce? - How To Discuss 上就不行。
有人能纠正我代码中的错误,使其也能在 ToC 页面上显示吗?
-
我还注意到我的代码以及整体的 Discourse 广告插件代码中存在另一个 bug:当我从一个页面导航到另一个页面时,我的 AdSense 广告代码从未刷新或重新加载,因此不会触发任何广告展示。可能是因为 Discourse 在导航时不会完全重新加载整个页面。我希望广告能够刷新,并且通过任何链接导航都能重新加载整个页面,该如何修复?
-
我的网站上还出现了许多此类 frame-src 错误,例如:https://howtodiscuss.com/t/how-mouthwash-rinse-become-a-necessary-step-in-oral-hygiene/30631
拒绝加载框架 'https://pagead2.googlesyndication.com/',因为它违反了以下 Content Security Policy 指令:"frame-src cm.g.doubleclick.net googleads.g.doubleclick.net www.google.com accounts.google.com pagead2.googlesyndication.com/pagead/s/cookie_push.html gmsg: https://tpc.googlesyndication.com/sadbundle/$csp=er3$/1522577804659956528/index.html"。
我的 CSP 设置如下所示:
但我不知道如何白名单 Google 广告的 iframe 请求?我也尝试过这段代码,但效果不佳,我仍然看到上述 frame-src 错误。如果我在 meta 标签的 frame-src 旁边添加值,它会报错说不能在 meta 标签中使用 frame-src。
<!--<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' http://* 'unsafe-inline'; frame-src ; script-src 'self' http://* 'unsafe-inline' 'unsafe-eval'" />-->
如果有人能帮我解决这些问题,将不胜感激:
我的主页上也出现了此类错误,https://howtodiscuss.com/(要复现错误,请在无痕模式下打开页面,或使用 VPN,或仅刷新几次,或导航到其他页面,您将在 JS 控制台中看到错误,并且还会看到 Google Vignette 广告在未给用户点击机会的情况下消失)
希望有人能提供帮助。
我的网站托管在 Cloudflare 上,我使用的是最新版本的 Discourse 2.6.0.beta6,已更新所有插件,并且刚刚重新构建了 Docker。但我仍然看到这些错误。


















