JavaScript Cookie 跨域广告实现原理与 Node.js 示例
本文详解如何利用 JavaScript Cookie 实现跨域广告展示。核心在于解决同源策略限制:通过服务端生成动态脚本,在响应中嵌入从请求 Cookie 读取的商品信息。结合 Node.js 和 Express 框架,演示了从设置 Cookie 到动态生成广告脚本的完整流程,帮助开发者理解跨域数据交互机制。
跨域广告场景与 Cookie 机制
在实际业务场景中,跨域调用天气预报组件可采用前述方法,而另一种常见应用则是展示电商广告。此类广告通常会滚动显示用户曾浏览过的商品,或推荐相关联的产品。
例如,在某个网页 A 中展示了两种类型的广告:
某东的广告,其中展示的内容均为用户访问过的商品,并附加了相关推荐。

某宝的广告,其呈现方式基本相同。

当用户访问某东或某宝的商品页面时,相关信息会被写入 Cookie;在展示广告时,系统会根据 Cookie 中的商品数据进行渲染。
跨域访问的核心限制与解决方案
这里存在一个关键问题。
网页 A 所在的域名与某东、某宝的域名相互独立。在网页 A 中,由于不同源策略的限制,无法直接获取某东或某宝的 Cookie,因此
在网页 A 中直接呈现商品信息既不可行也不合适。
因此,必须通过跨域方式来展示商品信息,需要解决的核心问题包括:
1. 跨域服务生成的脚本中不能直接获取 Cookie,Cookie 的读取必须在跨域服务端完成。
原因在于:跨域服务生成的脚本最终是在网页 A 中执行的,此时脚本访问到的 Cookie 只能是网页 A 所在站点的 Cookie,这显然不符合需求。
2. 跨域服务端必须能够获取到 Cookie。
答案是肯定的。只要浏览器向某个域名或地址发起请求,就会自动携带该域名对应的 Cookie。
Node.js 跨域广告实现示例
接下来,我们实现一个简单的演示案例。
演示案例的技术架构为:Node.js 结合 Express 框架。
1. 在跨域服务(模拟某电商平台)上,提供一个页面用于输入商品信息,以此模拟用户访问过的商品。输入内容后,将其保存到 Cookie 中。
页面结构

代码逻辑是将输入的内容添加过期时间后存入 Cookie,此处先进行简单的编码处理。
<!DOCTYPE html>
<html>
<head>
<title>setCookie</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<link rel="stylesheet" href="/stylesheets/style.css">
</head>
<body>
<h1>看过的商品</h1>
<div>
<span>商品1</span><input id="s1">
</div>
<p></p>
<div>
<span>商品2</span><input id="s2">
</div>
<p></p>
<div>
<span>商品3</span><input id="s3">
</div>
<p></p>
<div>
<span>商品4</span><input id="s4">
</div>
<p></p>
<div>
<input id="b" type="button" value="保存进cookie" onclick="saveInCookie();">
</div>
<script>
function saveInCookie(){
//所有商品信息
var eleS1=document.getElementById('s1');
var eleS2=document.getElementById('s2');
var eleS3=document.getElementById('s3');
var eleS4=document.getElementById('s4');
//生成24小时后过期的参数
var date=new Date();
var expiresMSeconds=3*24*3600*1000;
date.setTime(date.getTime()+expiresMSeconds);
//商品信息全部设置到cookie中
document.cookie='s1='+escape(eleS1.value)+";expires="+date.toGMTString();
document.cookie='s2='+escape(eleS2.value)+";expires="+date.toGMTString();
document.cookie='s3='+escape(eleS3.value)+";expires="+date.toGMTString();
document.cookie='s4='+escape(eleS4.value)+";expires="+date.toGMTString();
alert(document.cookie);
}
</script>
</body>
</html>
2. 在跨域服务上编写一段服务端生成脚本的代码。在生成脚本时,从浏览器携带的 Cookie 中解码并提取数据,将其拼接到脚本字符串中。
这里通过 request 对象提取 Cookie,虽然其他平台的具体实现方式可能不同,但原理一致:浏览器会自动携带 Cookie。
router.get('/ad', function (req, res) {
//拼接一JS字符串,完成向html页面中输出html标记
printCookies(req.cookies);
var s = 'document.write(\'<div style="background-color:red;width:10rem;height:10rem">商品广告';
//将cookie中所有的商品取出,拼到脚本字符串中
for (var p in req.cookies) {
s += '<div>' + unescape(req.cookies[p]) + '</div>';
}
s+='</div>\');';
console.log(s);
res.setHeader('content-type', 'text/javascirpt;charset=utf-8');
res.write(s);
res.end();
});
function printCookies(cookies) {
console.log('******cookies******');
for (var p in cookies) {
console.log(p + '=' + unescape(cookies[p]));
}
console.log('*******************');
}
3. 在本地网站的网页 A 中,向跨域服务发起脚本请求。
具体做法是通过 script 标签引用跨域服务提供的脚本地址。
<!DOCTYPE html>
<html>
<head>
<title>test</title>
<link rel="stylesheet" href="/stylesheets/style.css"></head>
<body>
<script src="http://localhost:3001/ad"></script>
<h1>航班信息</h1>
<h4>航班号:MU532</h4>
<h4>起飞:北京</h4>
<h4>抵达:上海</h4>
</body>
</html>
页面运行后,效果如图所示,即可列出访问过的商品信息,类似于投放了一则小型广告。

至此,功能实现完毕。
关于 JavaScript Cookie 跨域访问在广告推广中的应用就介绍到这里,希望对大家有所帮助!
在 NestJS 中使用管道验证数据与守卫控制访问权限
2026-11-05 12:43:41
Node.js后端生成高强度随机字符串的方法
2026-11-04 16:29:54
Node.js环境中怎么使用axios或http模块发送GET请求
2026-11-03 21:57:15
Node.js环境下怎么实现JS反混淆自动化?常用库与CLI工具推荐
2026-11-03 21:15:54
解决JS逆向常见报错:缺少DOM环境导致代码运行失败
2026-11-03 20:41:59
