1

我正在尝试检测浏览器上的“不跟踪”设置...... origionla 工作代码是:

if(navigator.doNotTrack == "yes" || navigator.doNotTrack == "1" || navigator.msDoNotTrack == "1"){
    alert("true");
}else{
    alert("false");
}

我正在尝试稍微重写它,我想知道如何在变量声明中使用条件?我想出了一个不起作用的片段,我想知道是否有人可以帮助我?

var DNT     = navigator.doNotTrack,
    msDNT   = navigator.msDoNotTrack,
    DNTtrue = "yes" || "1";

if(DNT === DNTtrue || msDNT === DNTtrue){
    alert("true");
}else{
    alert("false");
}
4

3 回答 3

3

你不能这样。表达式"yes" || "1"在遇到它的那一刻被评估。所以你最终比较DNTmsDNT"yes"没有办法告诉 JS 稍后计算表达式。即使那样,DNT === "yes" || "1"或者DNT === ("yes" || "1")也不会产生预期的结果。

这是一个替代解决方案,它只是测试值DNTmsDNT存在是否是对象中的属性:

var DNTtrue = {"yes": true, "1": true};

if (DNTtrue[DNT] || DNTtrue[msDNT]) {
    // ...    
}

如果DNTormsDNT具有与 and 不同的值"yes""1"DNTtrue[...]尝试访问不存在的属性,这将导致undefined(假值)。

于 2013-06-24T11:30:09.253 回答
1

在现代浏览器中,您可以使用数组和indexOf()方法:

DNTtrue = ["yes", "1"];

if(DNTtrue.indexOf(DNT) > -1 || DNTtrue.indexOf(msDNT) > -1){
    alert("true");
}else{
    alert("false");
}
于 2013-06-24T11:31:40.030 回答
0

在 if 语句中尝试 DNT.value Make DNTtrue=true not to yes

于 2013-06-24T11:24:38.297 回答