这似乎应该很容易做到,但我找不到任何可行的解决方案。基本思想是使用一个包含与url相关的代码的数组,并根据哪个url被解析为referrer,将代码插入localStorage。
var site = {
“example1.com” : "x10",
“example2.com” : "x11",
“example3.com” : "x12"
}
if (document.referrer.indexOf(sitevalue) != -1) {
if (localStorage) {
localStorage.setItem("code",sitekey);
}
}
因此,如果引用者是example1.com,那么localStorage中设置的代码将为“x10”,依此类推。我已经阅读过有关可能使用Underscore.js _Invert方法的内容,但我认为我必须找到一个更为明显的解决方案。
答案 0 :(得分:2)
这效率稍低,因为它在找到匹配后继续处理,但代码非常简单:
Object.keys(site).forEach(function(key) {
if (document.referrer.indexOf(key) > -1) {
if (localStorage) {
localStorage.setItem("code", site[key]);
}
}
});
更新:刚刚注意到了Underscore标记。使用Underscore,我可能会稍微更改循环,而是执行此操作:
_.forEach(_.pairs(site), function(pair) {
if (document.referrer.indexOf(pair[0]) > -1) {
if (localStorage) {
localStorage.setItem("code", pair[1]);
}
}
});
唯一明显的优势是,这可能适用于不支持Object.keys
或Array.prototype.forEach
的旧环境。
答案 1 :(得分:1)
如果您想获得"x10"
,可以通过site["example1.com"]
等获取
我确定您的具体要求,但这可以解决我的理解:
var site = {
"example1.com" : "x10",
"example2.com" : "x11",
"example3.com" : "x12"
}
if (document.referrer.indexOf(sitevalue) != -1) {
if (localStorage) {
var url = document.referrer.replace('www.','')
var host = url.match(/:\/\/(.[^/]+)/)[1];
localStorage.setItem("code", site[host]);
}
}
请注意,我添加了一些代码,以删除可能的前导www.
以及通过正则表达式从提供的网址中删除主机名。
答案 2 :(得分:1)
如果你想利用Underscore.js,下面的独立工作示例说明了如何遍历site
对象中的键,如果一个匹配referer字符串,则将其相应的代码存储在localStorage中。 / p>
<script src="http://underscorejs.org/underscore-min.js"></script>
<script>
// this variable is just for testing
var myReferer = "http://example2.com";
var site = {
"example1.com": "x10",
"example2.com": "x11",
"example3.com": "x12"
};
if (localStorage) {
_.each(site, function (value, key) {
// you'd replace "myReferer" with "document.referrer" here
if (myReferer.indexOf(key) !== -1) {
localStorage.setItem("code", value);
}
});
}
// this is also just for testing
alert(localStorage["code"]);
</script>