需要Javascript根据子域名更改广告跟踪器密钥

需要Javascript根据子域名更改广告跟踪器密钥,javascript,Javascript,我目前有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('typ

我目前有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>
var TrackerKey='keyabc123';var url='1〕http://website.com/jscode.js'; var script=document.createElement('script');script.setAttribute('src',url);setAttribute('type','text/javascript');document.body.appendChild(脚本);
我想结合所有4个,并简单地有跟踪键交换出的子域名的基础上,他们的

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

但是我没有足够的经验知道如何将域的信息作为变量传递给switch语句,然后使用它来更新tracker key变量

我想它可能看起来像下面这样

<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跟踪键;
开关(?){
案例0:
sub.domain1.com=“keyabc123”;
打破
案例1:
sub.domain2.com=“keydef456”;
打破
案例2:
sub.domain3.com=“keyghi789”;
打破
案例3:
sub.domain4.com=“keyjkl012”;
打破
}
var url='1〕http://website.com/jscode.js'; var script=document.createElement('script');script.setAttribute('src',url);setAttribute('type','text/javascript');document.body.appendChild(脚本);
我是不是走对了路

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

你很接近了:

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的惯例,变量和函数名是以小写字符开头的camelCase,类是以大写字符开头的camelCase。

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

将上面的“域”更改为您的域,然后使用

var TrackerKey;
switch(subdomain) { 
    case 'abc': //abc.domain.com
        TrackerKey = 'abc123';
        break;
}
然后执行通常的脚本插入


Regex ref:

我认为这应该可以做到:

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));

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

您的案例还应该反映它匹配的主机名,例如,
案例“www.yahoo.com”:。。。打破案例“videos.yahoo.com”:。。。中断你的子域在URL和它们的键中是什么样子的?非常感谢你,先生。银弹回答。我做了一个小文档;进行测试,并返回它应该返回的值。直到服务器,它需要更多的测试,但我认为它会工作得很好。