JavaScript  cookie 跨域访问之广告推广


Posted in Javascript onApril 20, 2016

在实际应用中, 跨域使用天气预报组件可以使用上面的方式实现,另外一种常用的就是显示某些电商的广告,此广告中会滚动您访问过的产品或者关联想推介给你的产品。

比如在某个A网页中显示了两种广告:

某东的广告,里面显示的东西,都是访问过滴,并且加推了相关的东西

JavaScript  cookie 跨域访问之广告推广

某宝的广告,基本一样呈现方式。

JavaScript  cookie 跨域访问之广告推广

当访问某东某宝的商品时,会把信息放到cookie中,呈现时会根据cookie中的商品信息进行呈现。

问题来了。

A网页所在的站点和某东某宝的站点肯定是独立的两个域名,在A网页中访问某东某宝的cookie是拿不到滴,因为不同源,那么

在A网页中的本身去呈现商品信息是做不到而且也不合适。

当然就要通过跨域的方式去呈现商品信息,需要解决的问题就是:

1.跨域服务生成的脚本中不能获取cookie,只能是在跨域的服务端获取cookie

为什么?,跨域服务生成的脚本最终是要在A网页上运行,在跨域服务生成的脚本中访问的cookie只能是A网页所在站点的cookie,那就不对了

2.跨域服务后台能够拿到cookie

答案是肯定的,浏览器只要向某个域名/地址发起请求,就会把其对应的cookie带过去。

那么,我们来实现个简单的demo

demo架构:node.js+express

1.在跨域服务上,可以理解成某电商,提供了一个页面,用来输入商品信息,模拟访问过的东西,输入后保存到cookie中。

页面

JavaScript  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,可能其他平台的方式不一样,但原理都是一样,浏览器是会带过来。

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 跨域访问之广告推广

如此,完成。

关于JavaScript  cookie 跨域访问之广告推广 的相关知识就给大家介绍这么多,希望对大家有所帮助!

Javascript 相关文章推荐
推荐17个优美新鲜的jQuery的工具提示插件
Sep 14 Javascript
点击弹出层外区域关闭弹出层jquery特效示例
Aug 25 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
js实现下拉框选择要显示图片的方法
Feb 16 Javascript
jquery实现图片上传之前预览的方法
Jul 11 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
Sep 04 Javascript
小程序调用微信支付的方法
Sep 26 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
Oct 22 Javascript
JavaScript实现简单Tip提示框效果
Apr 20 #Javascript
JS实现消息来时让网页标题闪动效果的方法
Apr 20 #Javascript
javascript实现仿百度图片的瀑布流加载效果
Apr 20 #Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
Apr 19 #Javascript
javascript实现简单计算器效果【推荐】
Apr 19 #Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 #Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 #Javascript
You might like
10个可以简化php开发过程的MySQL工具
2010/04/11 PHP
PHP读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
IE6兼容透明背景图片及解决方案
2015/08/19 Javascript
通过js获取上传的图片信息(临时保存路径,名称,大小)然后通过ajax传递给后端的方法
2015/10/01 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
JavaScript实现二维坐标点排序效果
2017/07/18 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
VUE v-for循环中每个item节点动态绑定不同函数的实例
2018/09/26 Javascript
electron中使用bootstrap的示例代码
2018/11/06 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
微信小程序实现电子签名并导出图片
2020/05/27 Javascript
Python第三方库的安装方法总结
2016/06/06 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
python django使用haystack:全文检索的框架(实例讲解)
2017/09/27 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python中一般处理中文的几种方法
2019/03/06 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
使用PyOpenGL绘制三维坐标系实例
2019/12/24 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
如何用python免费看美剧
2020/08/11 Python
美国最灵活的移动提供商:Tello
2017/07/18 全球购物
2014年图书馆工作总结
2014/11/25 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS