欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

js实现获取网站搜索来源代码

程序员文章站 2022-05-21 08:37:25
...
本文主要和大家分享js实现获取网站搜索来源代码,把以下代码引入所有页面,即可实现收集系统来源的功能,在任意页面中都可以使用全局的统一的来源信息,希望能帮助到大家。
var args = {
    mySite:"localhost",
    subSite:"子网站,比如移动端: m.xxx.com"
}
var index = (function(a) {
    var c = "";
    var d = args.mySite;
    a(function() {
        var g = function() {
            return function(k, l, j) {
                var h = j * 24 * 60 * 60 * 1000;
                var i = new Date();
                i.setTime(i.getTime() + h);
                var e = "; expires=" + i.toGMTString();
                document.cookie = k + "=" + escape(l) + e + "; path=/"
            }
        };
        try {
            if (document.referrer.indexOf(d) <= 0 || document.referrer.indexOf(d) > 10) {
                g().call(window, "regCompanyName", document.referrer.substring(0, 40) + "||" + window.location.href, 30)
            }
        } catch (f) {

        }
    });
    var b = function() {
        try {
            if (getCookie) {
                return getCookie
            }
        } catch (f) {}
        return function(e) {
            if (document.cookie.length > 0) {
                c_start = document.cookie.indexOf(e + "=");
                if (c_start != -1) {
                    c_start = c_start + e.length + 1;
                    c_end = document.cookie.indexOf(";", c_start);
                    if (c_end == -1) {
                        c_end = document.cookie.length
                    }
                    return unescape(document.cookie.substring(c_start, c_end))
                }
            }
            return null
        }
    };
})(jQuery);

//媒体
var media = "";
//媒体细分
var mediaSubpide = "";
//注册渠道。(直接赋值)
var registerChannel = "";
//终端,根据用户使用设备判断
var terminal = "";
//数据来源,根据cookie确定
var dataSource = "";
//当前链接
var localUrl = window.location.href;

var userChannel = {
    //媒体
    Media: function(channelInfo){
        channelInfo=channelInfo.toLowerCase();
        if(channelInfo.indexOf("||") == 0 && (channelInfo.indexOf(args.mySite) >= 0)){
            //媒体  无法判断(如直接搜索) 
            media = "网址打开或站内跳转";  //媒体
            mediaSubpide =  "";       //媒体细分

            // 无法获取referrer的来源的情况有:
            //1、个别平台外链使用noreferrer;
            //2、https跳转http;
            //3、网页重定向...
            //可在外链中植入可判定的参数如www.xxx.com&tag=zhihu
            if(channelInfo.indexOf("zhihu")>=0){
                media = "知乎";
                mediaSubpide = "";
            }
        }else if(channelInfo.indexOf("baidu.com") != -1){
            media = "百度";                       //媒体
            if(channelInfo.indexOf('utm_medium=cpc') != -1){
                mediaSubpide = "sem";         //媒体细分
            }else if(channelInfo.indexOf('utm_medium=cpc') == -1){
                mediaSubpide = "seo";         //媒体细分
            }else{
                mediaSubpide = "其它";      //媒体细分
            }
        }else if(channelInfo.indexOf('haosou.com') != -1 || channelInfo.indexOf('so.com') != -1){
            media = "好搜";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf('sogou.com') != -1){
            media = "搜狗";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf('sm.cn') != -1){
            media = "神马";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf('bing.com') != -1){
            media = "必应";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf('google.com') != -1){
            media = "google";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf('douban.com') != -1){
            media = "豆瓣";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }else if(channelInfo.indexOf("zhihu.com") != -1){
            media = "知乎";
            mediaSubpide = "无法判断";        
        }   
        else if(channelInfo.indexOf("toutiao") != -1){
            media = "今日头条";
            mediaSubpide = "无法判断";        
        }
        else{
            media = "其它";                       //媒体
            mediaSubpide = "无法判断";        //媒体细分
        }
    
        var mediaInfo=new Array(media,mediaSubpide);
        return mediaInfo;
    },
    //终端
    Terminal: function(){
        if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))){
            terminal = "移动端";
            return terminal;
        }else{
            terminal = "PC端";
            return terminal;
        }
    },
    
    //注册渠道。通过判断当前页面url获取
    RegisterChannel: function(){
        if(localUrl.indexOf(args.mySite)!= -1 ){
            registerChannel = args.mySite+"网站注册";
            return registerChannel;
        }else if(localUrl.indexOf(args.subSite)!= -1){
            registerChannel = args.subSite+"网站注册";
            return registerChannel;
        }else{
            registerChannel = "未知";
            return registerChannel;
        }
    }
};

//通用设置cookie方法
function setCookie(name, value, days) {
    var cookieTime = days * 24 * 60 * 60 * 1000;
    var d = new Date();
    d.setTime(d.getTime() + cookieTime);
    var cookieExpires = "; expires=" + d.toGMTString();
    document.cookie = name + "=" + escape(value) + cookieExpires + "; path=/";
}
//通用读取cookie方法
function getCookie(name) {
    var strCookie = document.cookie;
    var arrCookie = strCookie.split("; ");
    for (var i = 0; i < arrCookie.length; i++) {
        var arr = arrCookie[i].split("=");
        if (arr[0] == name)
            return unescape(arr[1]);
    }
    return "";
}

//排除站内跳转的情况,以免window.name被错误覆盖
if(document.referrer.indexOf(args.mySite)<=0){
    window.name=document.referrer.substring(0,40)+"||"+window.location.href;
}

//使用案例
dataSource = getCookie('regCompanyName');
if(!dataSource || ""== dataSource || typeof(dataSource)== "undefined") {
    //当cookie无法使用时,优先使用window.name
    dataSource = (window.name) ? window.name : "";
}

var judgeMedia = userChannel.Media(dataSource);
var judgeTerminal = userChannel.Terminal();
var judgeRegisterChannel = userChannel.RegisterChannel();

console.log(judgeMedia+' ',judgeTerminal+' ',judgeRegisterChannel+' ');

以上就是js实现获取网站搜索来源代码的详细内容,更多请关注其它相关文章!