Javascript для условного добавления или перенаправления URL на основе window.location.href - PullRequest
3 голосов
/ 05 апреля 2010

Я пытаюсь создать букмарклет, который при нажатии будет проверять 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 или псевдообъекта? Или лучше код?

Ответы [ 4 ]

2 голосов
/ 05 апреля 2010

Рефакторинг (вроде) рефакторинга предложения 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')

Это фактически присвоит "append2" концу window.location.href перед вызовом метода назначения, делая его избыточным.

Вы также можете уменьшить DOMпоиск путем установки window.location в переменную.

1 голос
/ 05 апреля 2010

Вид расширяемого кода. Я сумасшедший?

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;
 }
}
1 голос
/ 05 апреля 2010

Единственное сокращение, которое я вижу, это вытянуть избыточный индекс вызовов в vars и затем протестировать vars. Это не будет иметь никакого значительного влияния на производительность.

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');
}
0 голосов
/ 05 апреля 2010

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');}
...