广告与隐私
本站怎么赚钱 —— 以及它拒绝做什么
写这一页,是因为"免费"背后通常藏着点什么。这里把全部内容摊开说清楚,并且贴出站点上真实运行的代码。没有小字。
一句话版本
- 你的代码不会离开你的设备。编译器在你浏览器里跑,没有任何服务器接收它。
- 你正在用的那块地方没有广告。编辑器、运行按钮、测试结果按设计无广告 —— 这是代码强制的,不是政策里的一句承诺。
- 你来看的内容上方没有广告。不会有横幅把文章往下挤,这一条也由白名单强制。
- 我们不设任何追踪 Cookie。主题、语言、草稿、进度只存在你自己的浏览器本地。
- 广告来自 Google AdSense,Google 会设它自己的 Cookie —— 关闭个性化广告的方法就在下面,写得很具体。
声明一 —— 你的代码不会被上传
你敲的每个字符都由 JSCPP 编译 —— 一个用 JavaScript 写的 C++ 解释器,一次性加载进你的页面:
// js/site.js —— 全站唯一加载引擎的地方
var SELF = document.currentScript;
var VENDOR_BASE = (function () {
var src = (SELF && SELF.src) || "";
var i = src.indexOf("js/site.js");
return i >= 0 ? src.slice(0, i) : ""; // 从 /、/zh/、/es/ 都能用
})();
// 随站点一起发布的本地文件,不是 CDN —— 页面不从任何第三方域名
// 加载东西。
var JSCPP_URL = VENDOR_BASE + "vendor/jscpp.min.js";
// ……而你的程序是这样执行的:本地,就在这个标签页里。
function runInPage(code, stdin) {
return loadEngineScript().then(function (JSCPP) {
var out = "";
var exitCode = JSCPP.run(code, stdin || "", {
stdio: { write: function (s) { out += s; } }
});
return { ok: true, output: out, exitCode: exitCode };
});
}
判题代码里没有任何 fetch、XMLHttpRequest 或表单提交。你可以自己验证:打开开发者工具 → Network,做任意一道题,看有没有哪个请求带着你的源码。
声明二 —— 编辑器与测试结果旁边没有广告
全站有 370 个广告占位注释,但只有七种位置允许真正投放。其余位置 —— 包括全部"页面顶部" —— 永远休眠,因为它们会把内容往下推:
// js/ads.js —— 本站实际运行的广告位白名单
var CPPLAB_AD_PLACEMENT = {
allow: [
"below solution", // 一处,在题解之后
"mid-article", // 仅长文章,章节之间
"mid-lesson unit",
"end of article",
"end-of-lesson unit",
"bottom of hub", // 列表页页尾
"bottom unit"
]
// "top of article"、"top of hub"、"above lesson content"、
// "top responsive unit" 刻意不在列表里 —— 它们永远不会被渲染。
};
再看遍历页面找占位的那段循环 —— 注意 allow.some(...) 这个过滤:不在白名单里的一律跳过,而不是渲染:
if (/^\s*AD:/.test(t) && allow.some(function (k) { return t.indexOf(k) !== -1; })) {
marks.push(walker.currentNode); // 只有白名单里的位置才会插入广告
}
对学习者的实际含义:你在写代码、看通过/失败结果的时候,没有任何东西可点、没有东西抢注意力。题目页上你能遇到的第一个广告在题解之后 —— 也就是你已经做完的时候。
声明三 —— 我们不设追踪 Cookie
本站只存五样东西,全部在本地,你能看、能删:
| 键名 | 存的内容 |
|---|---|
cpplab.theme | 浅色/深色模式 |
cpplab.lang | 你的语言选择 |
cpplab.code | 练习场的草稿 |
cpplab.practice.… | 每道题的草稿 |
cpplab.game | 已通过的题、成就、连续天数 |
我们不设自己的 Cookie。在浏览器里清除站点数据,上面全部消失且我们这边毫无损失 —— 因为我们没有副本。
声明四 —— Google 会做什么(照实说)
为了让站点保持免费,我们计划展示 Google AdSense 广告。启用之后:
- Google(作为第三方供应商)会使用 Cookie,根据你此前对本站及其他网站的访问来投放广告。
- Google 对广告 Cookie 的使用,使其及其合作伙伴能基于你访问本站和/或互联网上其他站点的情况投放广告。
- 你可以关闭个性化广告:Google 广告设置。
- 位于欧洲经济区/英国的访客会看到符合 Google 欧盟用户同意政策的同意提示。
- 我们关闭了 Auto Ads。也就是说:不会有全屏插页,也不会有贴着页面底部、在你读到一半时冒出来的锚定条。
我们永远不会做的事
- 在你和"运行"按钮之间塞广告,或把广告放进测试结果里。
- 把练习题做成付费墙,或把题解藏在注册后面。
- 出卖你的数据 —— 我们根本没收集可以卖的东西。
- 弹"请关闭广告拦截器"的墙。你拦广告,站点照样完整可用。
怎么自己核实这些说法
- 看代码:上面提到的文件(
js/site.js、js/ads.js)都是未压缩的普通 JavaScript,没有构建步骤。 - 看网络请求:开发者工具 → Network → 做一道题。没有任何请求携带你的代码。
- 数广告:题目页第一个广告位在题解之后;文章页永远不会出现在第一个标题之上。
- 清理:开发者工具 → Application → Local Storage → 删掉那些键,刷新。你就是全新访客。
如果这一页写的和站点实际行为不符,那是个 bug —— 告诉我们,我们改代码或改页面。完整隐私政策。