需要Javascript改变基于子域名的广告跟踪器键

Need Javascript to change an ad tracker key based off sub domain name

本文关键字:跟踪 域名 改变 Javascript 需要      更新时间:2023-09-26

我目前有4个不同的javascript广告跟踪。它们看起来像这样:

<script type='text/javascript'> var TrackerKey = 'keyabc123'; var url = 'http://website.com/jscode.js'; var script = document.createElement('script'); script.setAttribute('src', url); script.setAttribute('type', 'text/javascript'); document.body.appendChild(script);</script>

我想把所有4个组合起来,并简单地根据他们所在的子域名交换跟踪器密钥。

到目前为止,我已经能够计算出我将使用window.location.hostname来查找域是什么。我可能会使用switch语句或if/else方法。

我没有足够的经验,虽然知道如何将域作为变量的信息传递给switch语句,然后使用它来更新跟踪器键变量。

我假设它看起来像下面这样…

<script type='text/javascript'> 
var domain = window.location.hostname;
var TrackerKey;
switch (???) {
    case 0:
        sub.domain1.com = "keyabc123";
        break;
    case 1:
        sub.domain2.com = "keydef456";
        break;
    case 2:
        sub.domain3.com = "keyghi789";
        break;
    case 3:
        sub.domain4.com = "keyjkl012";
        break;
}
var url = 'http://website.com/jscode.js'; var script = document.createElement('script'); script.setAttribute('src', url); script.setAttribute('type', 'text/javascript'); document.body.appendChild(script);</script>

我在正确的路径上吗?

抱歉,这是我第一次尝试超越最基本的东西。

你很接近了:

var domain = window.location.hostname;
var TrackerKey;
switch (domain) {
    case "sub.domain1.com":
        TrackerKey = "keyabc123";
        break;
    case "sub.domain2.com":
        TrackerKey = "keydef456";
        break;
    case "sub.domain3.com":
        TrackerKey = "keyghi789";
        break;
    case "sub.domain4.com":
        TrackerKey = "keyjkl012";
        break;
}

根据Javascript的约定,变量名和函数名也是驼峰式大小写,以小写字符开头,类名也是驼峰式大小写,以大写字符开头。

var subdomain = window.location.hostname.match(/(http:'/'/)?(([^.]+)'.)?domain'.com/)[3]

将上面的'domain'更改为您的域名,然后使用

var TrackerKey;
switch(subdomain) { 
    case 'abc': //abc.domain.com
        TrackerKey = 'abc123';
        break;
}

然后执行通常的脚本插入。

Regex ref: Regex从URL提取子域?

我想这个应该可以了:

function trackerKey(url){
  var d = url.replace(/^((ht|f)tps?':'/'/)?(www'.)?([^.]+).+$/i, '$4').toLowerCase();
  switch(d){
    case 'vancouver':
      return 'someKey1';
    case 'portland':
      return 'someKey2';
    case 'seattle':
      return 'someKey3';
    case 'losangeles':
      return 'someKey4';
    default:
      return 'someKey';
  }
}
console.log(trackerKey(location));

如果你在seattle.craigslist.org下运行这段代码,你会在控制台中看到someKey3。同样地,vancouver.craigslist.ca会得到someKey1。当然,您必须为craigslist工作才能运行上述代码。这只是一个例子。顺便说一下,我通常会发现返回密钥或根据已知的客户端信息生成密钥是没有意义的。您应该处理加密服务器端。注意,您不必键入window.,因为它是隐式的。