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 相关文章推荐
javaScript - 如何引入js代码
Mar 09 Javascript
Javascript里使用Dom操作Xml
Sep 20 Javascript
超级退弹代码
Jul 07 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
学习JavaScript设计模式(继承)
Nov 26 Javascript
js实现的二分查找算法实例
Jan 21 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
jQuery模拟下拉框选择对应菜单的内容
Mar 07 Javascript
fetch 使用及如何接收JS传值
Nov 11 Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
微信小程序开发背景图显示功能
Aug 08 Javascript
详解JavaScript栈内存与堆内存
Apr 04 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
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
javascript一元操作符(递增、递减)使用示例
2013/08/07 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
jQuery Position方法使用和兼容性
2017/08/23 jQuery
Node中使用ES6语法的基础教程
2018/01/05 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
解决vue的 v-for 循环中图片加载路径问题
2018/09/03 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
[06:10]6.81新信使新套装!给你一个炫酷的DOTA2
2014/05/06 DOTA
python简单实现基数排序算法
2015/05/16 Python
Python 26进制计算实现方法
2015/05/28 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
tensorflow: variable的值与variable.read_value()的值区别详解
2018/07/30 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python在终端通过pip安装好包以后在Pycharm中依然无法使用的问题(三种解决方案)
2020/03/10 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
python time()的实例用法
2020/11/03 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
新学期校长寄语
2014/01/18 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
期中考试反思800字
2014/05/01 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
2015小学教师年度考核工作总结
2015/05/12 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
原生Javascript+HTML5一步步实现拖拽排序
2021/06/12 Javascript
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript