![](/img/trans.png)
[英]how the browser execute this javascript code: window.location.href=“url”
[英]Javascript for conditional URL append or redirect based on window.location.href
我正在尝试制作一个书签,当点击它时将检查当前标签/窗口的URL,看它是否包含'char1'和/或'char2'(给定字符)。 如果两个字符都存在,则重定向到另一个URL,对于另外两个字符,它将分别附加当前URL。
我相信必须有一个更优雅的方式陈述这个比以下(迄今为止对我来说完美的工作)但我对Javascript没有很好的了解。 我的(笨重的和重复的)工作代码(道歉):
if (window.location.href.indexOf('char1') != -1 &&
window.location.href.indexOf('char2') != -1)
{
window.location="https://website.com/";
}
else if (window.location.href.indexOf('char1') != -1)
{
window.location.assign(window.location.href += 'append1');
}
else if (window.location.href.indexOf('char2') != -1)
{
window.location.assign(window.location.href += 'append2');
}
完全是我需要的,但是,好吧......至少可以说不是很优雅。
有没有更简单的方法来做到这一点,也许是对于vars或伪对象? 还是更好的代码?
对dthorpe建议的一种(类型)重构:
var hasC1 = window.location.href.indexOf('char1')!=-1
var hasC2 = window.location.href.indexOf('char2')!=-1
var newLoc = hasC1
? hasC2 ? "https://website.com/" : window.location.href+'append1'
: hasC2 ? window.location.href+'append1' : '';
if (newLoc)
window.location = newLoc;
调用assign
与为window.location
分配值相同,无论如何你在方法中都使用了加法赋值+=
运算符:
window.location.assign(window.location.href+='append2')
这实际上会在调用assign方法之前将“append2”分配给window.location.href
的末尾,从而使其成为冗余。
您还可以通过将window.location
设置为var来减少DOM查找。
我能看到的唯一减少是将多余的调用索引拉入变量,然后测试变量。 但是,它不会在性能方面产生任何明显的差异。
var hasChar1 = window.location.href.indexOf('char1') != -1;
var hasChar2 = window.location.href.indexOf('char2') != -1;
if (hasChar1)
{
if (hasChar2)
{
window.location="https://website.com/";
}
else
{
window.location.assign(window.location.href+='append1');
}
}
else if (hasChar2)
{
window.location.assign(window.location.href+='append2');
}
一种可扩展的代码。 我疯了吗?
var loc = window.location.href;
var arr = [{
url: "https://website.com/",
chars: ["char1", "char2"]
}, {
url: loc + "append1",
chars: ["char1"]
}, {
url: loc + "append2",
chars: ["char2"]
}];
function containsChars(str, chars)
{
var contains = true;
for(index in chars) {
if(str.indexOf(chars[index]) == -1) {
contains = false;
break;
}
}
return contains;
}
for(index in arr) {
var item = arr[index];
if(containsChars(loc, item.chars)) {
window.location.href = item.url;
break;
}
}
var location = window.location.href
if (location.indexOf('char1')!=-1 && location.indexOf('char2')!=-1)
{window.location="https://website.com/";}
else if (location.href.indexOf('char1')!=-1) {window.location.assign(location+='append1');}
else if (location.indexOf('char2')!=-1) {window.location.assign(location+='append2');}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.