2011-03-09 3 views
0

사용자가 어디에서 왔는지 식별하기 위해 다음과 같은 작은 자바 스크립트 (훌륭한 parseURI 함수 기반)를 작성했습니다. 나는 JavaScript에 익숙하지 않지만 아래 코드가 작동하더라도이 같은 결과를 얻는보다 효율적인 방법이 있는지 궁금해하고있다.도움말 리팩터는 사용자의 리퍼러 소스를 식별하는 작은 자바 스크립트 코드

try { 
     var path = parseUri(window.location).path; 

     var host = parseUri(document.referrer).host; 
     if (host == '') { 
       alert('no referrer'); 
       } 

     else if (host.search(/google/) != -1 || host.search(/bing/) != -1 || host.search(/yahoo/) != -1) { 
       alert('Search Engine'); 
       } 
     else { 
       alert('other'); 
       } 
     } 

catch(err) {} 

답변

2

당신은 다른 검색을 사용하여 호스트 체크를 단순화 할 수 있습니다 :

else if (host.search(/google|bing|yahoo/) != -1 { 

나는 또한 "리퍼러"오류에 대한 호스트를 추출하기 전에 문서 리퍼러를 테스트하기 위해 유혹 할 것입니다.

(테스트하지 않았습니다).

+1

감사합니다! 방금 호스트를 추출하기 전에 문서 리퍼러를 테스트하라는 제안을 테스트했습니다. 다음은 업데이트 된 코드입니다. if (document.referrer) { var host = parseUri (document.referrer) .host; if (host.search (/ google | bing | yahoo /)! = -1) { alert ('검색 엔진'); } else { 알림 ('기타'); } } else { alert ('direct'); } –

+1

주의하십시오. 이것은 또한'mygoogleclone.myevilsite.com'과 일치합니다 –

+0

아주 좋은 지적입니다. google (및 다른 사이트)의 정규식을 "^ www \ .google \. (com | co \ ...) $"와 같이 수정할 수 있습니다. 이것은 위조 된 결과가 나오지 않았는지 확인하기 위해 신중한 테스트가 필요하지만 (다시 테스트 해 보았습니다.) 네가 한 수표가 얼마나 강건한가에 달려 있다고 생각해. –

0

많은 프로젝트에서 set이라는 함수를 정의합니다. 당신이 우아 목록에 대해 당신의 결과를 테스트 할 수 있습니다

당신이 당신이 ...

// low-fi way to grab the domain name without a regex; this assumes that the 
// value before the final "." is the name that you want, so this doesn't work 
// with .co.uk domains, for example 
var domain = parseUri(document.referrer).host.split(".").slice(-2, 1)[0]; 

찾고있는 호스트 이름의 부분을했으면

function set() { 
    var result = {}; 
    for (var i = 0; i < arguments.length; i++) 
     result[arguments[i]] = true; 
    return result; 
} 

... : 그것은 다음과 같습니다

if (domain in set("google", "bing", "yahoo")) 
    // do stuff 

상세 정보 :

,369 자바 스크립트의 in 연산자와 우리가 위에서 정의 된 set 기능을 사용하여개