javascript操作referer

Referrer的重要性 HTTP请求中有一个referer的报文头,用来指明当前流量的来源参考页。例如在www.sina.com.cn/sports/上点击一个链接到达cctv.com首页,那么就referrer就是www.sina.com.cn/sports/了。在Javascript中,我们可以通过document.referrer来获取同样的信息。通过这个信息,我们就可以知道访客是从什么渠道来到当前页面的。这对于Web Analytics来说,是非常重要的,这可以告诉我们不同渠道带来的流量的分布情况,还有用户搜索的关键词等,都是通过分析这个referrer信息来获取的。 但是,出于各种各样的原因,有时候Javascript中读到的referrer却是空字符串。下面总结一下哪些情况下会丢失referrer。 修改Location对象进行页面导航 Location对象是一个用于页面导航的非常实用的对象。因为他允许你只变更Url的其中一部分。例如从cn域名切换到com域名,其他部分不变: 1 window.location.hostname = "example.com"; 但是,通过修改Location进行页面导航的方法,会导致在IE下丢失Referrer。 IE5.5+ 下返回空字符串 Chrome3.0+,Firefox3.5,Opera9.6,Safari3.2.2均正常返回来源网页 window.open方式打开新窗口 示例: 1 <a href="#" onclick="window.open('http://www.google.com')">访问Google</a> 点击此链接会在新窗口打开Google网站,我们在地址栏中输入以下js代码就可以看到发送的referrer了。 1 javascript:alert(document.referrer) 测试结果: IE5.5+ 下返回空字符串 Chrome3.0+,Firefox3.5,Opera9.6,Safari3.2.2均正常返回来源网页 如果是同个域名下通过此方式跳转的,那么我们可以通过访问windoww.opener对象去获取丢失的referrer信息。代码如下: <script type="text/javascript">     var referrer = document.referrer;     if (!referrer) {         try {             if (window.opener) {                 // IE下如果跨域则抛出权限异常                 // Safari和Chrome下window.opener.location没有任何属性                 referrer = window.opener.location.href;             }         }         catch (e) {}     } </script> 跨域的话则没辙了~ 鼠标拖拽打开新窗口 鼠标拖拽是现在非常流行的用户习惯,很多浏览器都内置或者可以通过插件的方式来支持鼠标拖拽式浏览。但是通过这种方式打开的页面,基本全都丢失referrer。并且,这种情况下,也无法使用window.opener的方式去获取丢失的referrer了。 已测试: Maxthon2.5.2,Firefox的FireGesture插件,Chrome3.0+,Opera9.6,Safari3.2。 点击Flash内部链接 点击Flash上到达另外一个网站的时候,Referrer的情况就比较杂乱了。 IE下,通过客户端Javascript的document.referrer读取到的值是空的,但是如果你使用流量监控软件看一下的话,你会发现,实际上HTTP请求中的Referer报文头却是有值的,这可能是IE实现的Bug。同时,这个值指向的是Flash文件的地址,而不是来源网页的地址。 Chrome4.0下点击Flash到达新窗口之后,Referrer也是指向的Flash文件的地址,而不是源网页的地址。 Chrome3.0和Safari3.2是一样的,都是会丢失Referrer信息。 Opera则和Firefox一样,Referrer的值都是来源网页的地址。 HTTPS跳转到HTTP 从HTTPS的网站跳转到HTTP的网站时,浏览器是不会发送referrer的。这个各大浏览器的行为是一样的。 例如,我们在HTTPS下使用Google Reader或是Gmail的时候,点击某个链接去到另外一个网站,那么从技术上来说,这样的访问和用户直接键入网址访问是没有什么分别的。 Referrer丢失对于广告流量监控的影响 Referrer如果丢失,Web Analytics就会丢掉很重要的一部分信息了,特别对于广告流量来说,就无法知道实际来源了。目前国内好多用了Google Adsense广告的网站,都使用了window.open的方式来打开广告链接,因此IE下会丢失Referrer,而我们知道,IE是目前市场份额最大的浏览器,因此其影响是很大的。很多流量统计工具会因此将这部分流量归入“直接流量”,和用户直接键入网址等价了。 对于这样的情况,需要让广告投放者在投放广告的时候,给着陆页面的Url加上特定的跟踪参数。 例如,某个Flash广告,点击之后到达的网址是http://www.example.com/,为了监控此流量是从哪个渠道过来的,我们可以修改此投放的着陆Url,改成http://www.example.com/?src=sina,类似这种方式,然后在着陆页面中使用Javascript代码提取此src参数,这样就可以得到广告来源信息。 在投放Google Adwords的时候,后台系统有一个“自动标记”的选项,当启用此选项的时候,Google在生成所有广告的着陆页面Url的时候,就会自动加上一个gclid的参数,这个参数能够将Google Analytics后台和Adwords广告后台的数据进行整合。这样就可以知道广告流量对应于哪个广告系列,哪个广告来源和广告关键词等信息了。和上面提到的思路其实是类似的。只不过Google自动帮你做了Url的修改了而已。 IE下referer为空的解决办法 在IE下采用 window.location.href方式跳转的话,referer值为空。而在标签里面的跳转的话 referer就不会空。所以,通过以下代码就可以解决这个IE问题 function gotoUrl(url){      if(window.VBArray){          var gotoLink = document.createElement('a');          gotoLink .href = url;          document.body.appendChild(gotoLink); […]

龙生   30 Jun 2018
View Details

解决Node.js调用fs.renameSync报错的问题(Error: EXDEV, cross-device link not permitted)

今天开始学习Node.js,在写一个文件上传的功能时候,调用fs.renameSync方法错误   出错代码所在如下:

大致分析后,预计是因为跨磁盘分区移动或操作文件会有权限问题。 下面提供两种解决办法: 方法一: 主要利用fs的createReadStream、createWriteSream和unlinkSync方法 具体代码如下:

PS:我用的node版本是0.10.69,如果使用的是0.6以下的版本,可以使用util.pump 相应代码只需将上面的代码中readStream.on处改成:(注意引入util模块)

  方法二: 这种就简洁很多了 添加一个 form.uploadDir=’tmp' 即可(写一个临时路径)

解决问题后,就可以很开心的继续我的Node学习了,感觉路还很长啊   PS:附上两个有关Node文件上传的帖子,个人觉得挺不错的,来源都是cnode   nodejs-post文件上传原理详解   node-formidable详解   from:https://www.cnblogs.com/glczero/archive/2014/08/23/3932024.html

龙生   28 Jun 2018
View Details

未找到与约束ContractName,无法打开项目的解决方案

如果VS2013,在打开解决方案时,报如下错误: “未找到与约束 ContractName Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService RequiredTypeIdentity Microsoft.Internal.VisualStudio.PlatformUI.ISolutionAttachedCollectionService 匹配的导出” 导致项目无法打开以及VS无法关闭。 解决方法: 1.关闭VS; 2.去C:/Users/<your users name>/AppData/Local/Microsoft/VisualStudio/12.0/ComponentModelCache文件夹下删除所有文件及文件夹; 3.重新打开VS即可。     如果是vs2012的话 方法一: 可以尝试删除最近更新的windows补丁更新,主要是关于.net Framework的。 如果方法一行不通,可以尝试方法二,或直接用方法二解决。 方法二: 安装微软的windows补丁 KB2781514(官网:https://www.microsoft.com/zh-cn/download/details.aspx?id=36020) ,补丁主要解决“在 .NET Framework 4.5 更新之后,Visual Studio 用户可能无法打开或创建 C++ 或 JavaScript 文件或项目。”   from:https://www.cnblogs.com/ChineseMoonGod/p/5687521.html

龙生   28 Jun 2018
View Details

从一份配置清单详解Nginx服务器配置

在前面《Nginx服务器开箱体验》 一文中我们从开箱到体验,感受了一下Nginx服务器的魅力。Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,因而在实践之中使用广泛,笔者也在学习和实践之中。
在本文中,我们继续延续前文,从前文给出的一份示例配置清单开始,详解一下Nginx服务器的各种配置指令的作用和用法。

龙生   28 Jun 2018
View Details

PowerDesigner中NAME和COMMENT的互相转换,需要执行语句

使用说明: 在【Tools】-【Execute Commands】-【Edit/Run Script】 下。输入下面你要选择的语句即可,也可以保存起来,以便下次使用,后缀为.vbs。 需要注意的问题是:运行语句时必须在Module模式下,如果是导出报表时执行会出现错误提示。 1.Name转到Comment注释字段。一般情况下只填写NAME,COMMENT可以运行语句自动生成。 将该语句保存为name2comment.vbs

2.将Comment内容保存到NAME中,comment2name.vbs 实习互换。语句为:

from:https://www.cnblogs.com/netsql/archive/2010/05/24/1742734.html

龙生   27 Jun 2018
View Details

PowerDesigner从Sqlserver中反转为带注释的字典及快捷键操作

PowerDesigner的操作经常忘记,所以把常用的功能记录下来备忘。 1、修改反转过来的字段 PowerDesigner从数据库反转的时候,默认不带注释,需要先进行修改。 输入如下脚本: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 {OWNER, TABLE, S, COLUMN, DTTPCODE, LENGTH, SIZE, PREC, COMPUTE, NOTNULL, IDENTITY, DOMAIN, DEFAULT, COMMENT, ExtIdentityIncrement, ExtIdentitySeed} select u.name, o.name, c.colid, c.name, case when (s.usertype < 100) then s.name else x.name end, c.prec, c.length, c.scale, z.text , case (c.status & 8) when 8 then 'NULL' else 'NOTNULL' end, case (c.status & 128) when 128 then 'identity' else " end, case when (s.usertype < 100) then " else s.name end, v.text, CONVERT(varchar, ISNULL(p.[value], ")) AS text, case (c.status & 128) when 128 then ident_incr(u.name + '.' + o.name) else null end, case (c.status & 128) when 128 then ident_seed(u.name + '.' + o.name) else null end from dbo.sysusers u join dbo.sysobjects o on (o.uid = u.uid and o.type in ('U', 'S', 'V')) […]

龙生   27 Jun 2018
View Details

Mysql 忘记root密码的完美解决方法

一、更改my.cnf配置文件 1.用命令编辑/etc/my.cnf配置文件,即:vim /etc/my.cnf 或者 vi /etc/my.cnf 2.在[mysqld]下添加skip-grant-tables,然后保存并退出 3.重启mysql服务:service mysqld restart 二、更改root用户名 1.重启以后,执行mysql命令进入mysql命令行 2.修改root用户密码 1 2 3 MySQL> UPDATE mysql.user SET Password=PASSWORD('新密码') where USER=’root'; MySQL> flush privileges; MySQL> exit 3.把/etc/my.cnf中的skip-grant-tables注释掉,然后重启mysql,即:service mysqld restart 好了,下面就可以用root新的密码登录了! 以上所述是小编给大家介绍的Mysql 忘记root密码处理办法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持! from:https://www.jb51.net/article/100925.htm

龙生   27 Jun 2018
View Details

代码规范审查 -Sonar环境搭建

Sonar概述 Sonar 是一个用于代码质量管理的开放平台,可以进行代码质量的持续跟踪审查,支持的语言包含C#、java、PHP、C等。可以通过UI一睹Sonar的强大之处。   Sonar安装          Sonar是一个基于java的开源平台,环境安装包含JDK安装、数据库安装、Sonar Server安装、Sonar Runner安装。 一、JDK安装 下载java SDK ,下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html  安装java sdk,直接双击exe进行运行 验证java安装是否成功,打开命令行,运行java –version, 如果显示如下图,代表安装成功!  二、数据库安装 Sonar支持数据库类型:Sql server、MySQL、Oracle,此处以MySql为例 Mysql数据库下载地址:https://www.mysql.com/downloads/, 具体安装步骤省略可自行学习。 配置Sonar数据库(创建Sonar数据库、用户等) CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; CREATE USER 'sonar' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar’@’%' IDENTIFIED BY 'sonar'; GRANT ALL ON sonar.* TO 'sonar’@’localhost' IDENTIFIED BY 'sonar'; FLUSH PRIVILEGES;   三、Sonar server及scanner配置 下载sonar(只需下载解压,无需安装) 下载地址:https://www.sonarqube.org/downloads/ 下载sonar scanner(只需下载解压,无需安装) 下载地址:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner 添加snoar和snoar scanner到环境变量        添加SONAR_HOME、SONAR_RUNNER_HOME环境变量,并将SONAR_RUNNER_HOME加入PATH环境变量参考如下: SONAR_HOME:C:\sonar\sonarqube-6.2 SONAR_RUNNER_HOME:C:\sonar\Sonar-scanner-2.8 PATH:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;%SONAR_RUNNER_HOME%/bin;%MAVEN_HOME%\bin; 编辑sonar配置文件,修改如下: 编辑sonar\sonarqube-6.2\conf\sonar.properties文件,配置数据库设置,默认已经提供各类数据库的支持,这里使用mysql,因此取消mysql模块的注释,修改内容如下: 编辑SonarRunner配置文件,修改如下: 编辑Sonar-scanner-2.8\conf\conf\sonar-runner.properties文件,配置数据库设置,默认已经提供各类数据库的支持,这里使用mysql,因此取消mysql模块的注释,修改内容如下:          启动sonarQube服务,从sonarqube-6.2\bin\windows-x86-64目录下双击启动StartSonar.bat,启动成功显示如下: 访问http:\localhost:9000检测是否启动成功 安装中文包       […]

龙生   25 Jun 2018
View Details

Win10自带的虚拟机Hyper-V安装Centos7

1、设置开启Hyper-V应用程序  在搜索功能里输入 Hyper-V 然后点击选中的部分 2、全部选中框中的部分,然后重新启动电脑 3、在搜索功能里输入Hyper-V 打开 4、点击新建--> 下一步--> 5、修改名称 和虚拟机存储位置 6、这里一定要选择“第一代”,不然无法正常启动到安装界面 7、分配内存根据自己情况来设置 8、网络配置(网络设置的 专用虚拟机交换机为无线网卡 设置 见下图 步骤:) 专用虚拟机交换机为无线网卡 设置 步骤 9、连接虚拟硬盘 10、安装选项 选中镜像位置 11、设置信息如下:通过摘要查看 (最后点击完成后自动创建虚拟机) 12、选择创建好的虚拟机 先启动-->连接 13、安装Centos7 选中图中部分 进入安装界面 14、选择语言 最后选择英文哦 15、点击 Done 选择自动分区 16、开始安装 : 1. 设置root密码 2.创建用户 17、root密码设置 18、等待重启  然后用root用户登陆 密码是刚才设置的 18、网络配置设置  修改配置文件 网络桥接右键 桥接(桥接完成之后记得通过属性修改网桥的IP地址 手动设置)   from:https://blog.csdn.net/xuanalex/article/details/79943206

龙生   25 Jun 2018
View Details
1 182 183 184 432