2010-04-05 11 views
3

클릭하면 북 탭에 'char1'및/또는 'char2'가 포함되어 있는지 확인하기 위해 현재 탭/창 URL을 확인합니다. '(주어진 문자). 두 문자가 모두있는 경우 다른 URL로 리디렉션됩니다. 다른 두 문자는 현재 URL을 각각 추가합니다.조건부 URL에 Javascript를 추가하거나 window.location.href를 기반으로 리디렉션

나는 (지금까지는 완벽하게 작동 한) 다음보다 진보 된 방법이 있어야한다고 생각하지만 자바에 대한 지식은 충분하지 않습니다. 내 (다루기 힘든 & 반복) 작업 코드 (사과) :

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 또는 의사 객체를 사용하면이 작업을 수행하는 간단한 방법이 있습니까? 아니면 더 나은 코드?

+0

로테 르톤 산의 형식에 감사드립니다. 북마크 렛 형식으로 코드를 남기는 것은 다소 잔인합니다. 저는 시간과 코드에 기여한 사람들에게 매우 감사하고 있습니다. 나는 그러한 풍부한 입력을 그렇게 빨리 예상하지 못했다. -Wintermute – Wintermute

답변

2

A (정렬의) 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') 

실제로 할당 방법을 호출하기 전에 window.location.href 끝에 "append2"가 할당되어 중복됩니다.

window.location을 var로 설정하여 DOM 조회를 줄일 수도 있습니다.

+0

"전화 걸기 할당은 window.location ...에 값을 할당하는 것과 같습니다." 그게 내 생각이지만 스크립트는 주소 표시 줄 대신 문서 창에 추가 된 URL을 계속 반환하고 주소 표시 줄에는 자바 스크립트. 기록 -1은 주소 표시 줄에 추가 된 URL과 함께 이전 페이지로 되돌아 왔습니다. 그래서 나는 assign 함수로 감싸서 결과를 사용하도록했다. 그것은 효과가 있었지만 중복되었습니다. 덧붙여 말하자면, 코드는 동일한 작업을 수행합니다. 추가 된 URL을 검색 주소창이 아닌 doc win으로 반환합니다. – Wintermute

+0

시간을내어 도와 주셔서 감사합니다. 나는 약간의 vars를 나 자신으로 만들려고 노력했다. 그러나 그것은 해결하고 있었다. 내가 뭘 잘못했는지는 잘 모르겠지만, 당시 친구들에게 내 집을 가져 가던 친구들의 마음이 산만 해졌습니다. 당신의 의견을 고맙게 생각합니다. – Wintermute

+1

@Wintermute : np. 그건 이상한 문제처럼 보입니다. window.location.assign (newLoc)에 대해'window.location = newLoc'을 변경할 수 있습니다. 그러나 앞서 언급했듯이, 이것들은 충분히 유사합니다. –

1

필자가 볼 수있는 유일한 감소점은 vars로 중복되는 indexof 호출을 제거한 다음 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

응답 해 주셔서 감사합니다. 귀하의 의견에 감사드립니다. 이것은 훨씬 더 구조화 된 'if'이며, 나의 것보다 논리적으로 좀 더 해결됩니다. 나는 당신이 같은 assign (loc.href + =)을 사용하는 이유가 있었는지 궁금하다. 중복된다. 그러나 결과를 location.href에 강제로 반환 할 수있는 유일한 방법은 문자열을 주 문서 창에 놓습니다. – Wintermute

+0

이것은 나를 위해 아주 잘 작동하고있다. Andy E가 제안한대로 새로운 var : loc = window.location을 추가했습니다. 이제는 loc.property 또는 loc.function입니다. – Wintermute

+0

나는 창문을 자세히 보지 않았다. 위치 할당. 나를 위해 Neuromancer에게 인사하십시오. ;> – dthorpe

0

VAR 위치 = 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');} 
+0

니스 & 간결, 그냥 좋아해요. 2 개의 vars를 사용하여 코드를 더 줄입니다 :'loc = window.location' &'url = loc.href'. 이것은 또한'location = ""'파운데이션 윈도우 대신 주소 대신 문자열로 반환됩니다. 'loc.assign()'(위의 변수들과 함께)은 이것을 수정합니다.나는 문자열을 위치에 추가하면 문자가 점등되고 문서 콘텐츠로 처리되므로 문서 창으로 이동하기 때문에 생각합니다. 귀하의 의견을 보내 주셔서 감사합니다! – Wintermute

1

확장 가능한 코드의 종류. 내가 미쳤나요?

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

크레이지? 아니,하지만 아마도 더 큰 물고기를 튀기는 데 익숙해졌습니다. :) 사이트 \ 도메인 내에서 구현하는 것이 좋을 것입니다. 왜냐하면 볼 수있는 것에서 훨씬 더 유연하고 확장 가능하기 때문입니다. 쿼리 문자열 및 검색을 검사 할 때 특히 유용 할 것이라고 생각합니다. 사용자를 FAQ 나 자신의 탐색이나 사이트 검색과 관련된 특별 공지 사항으로 리디렉션 할 수 있습니다. 좋은 일이지만, 내 필요에 대해 그것은 핵폭탄으로 모기를 죽이는 것과 같습니다. – Wintermute