2016-11-06 2 views
9

나는 브라우저 주소창에 전체 URL을 얻기 위해 location.href을 사용하고 있습니다.
자세한 내용을 보려면 Google 서비스에 고객 사이트에 포함될 js 파일이 있다는 점에 유의해야합니다. 따라서이 JS 파일은 신청자의 전체 URL을 생성합니다.location.href 이상한 URL을 반환

이 URL은 실제 도메인으로 리디렉션 된 이전 URL이지만이 작업을 어떻게 막아야한다고 생각 했습니까?

은 iframe의 src 속성에 대한 링크를 생성 JS 코드의 라인은 다음과 출원인 UA의

'http://sd.domain.ir/index.php?r=' + Math.floor(Math.random() * (100000000 - 0 + 1)) + 0 + '&ref=' + ((window.btoa) ? btoa(location.href) : 'ie') + '&responsive=' + ((document.querySelector('meta[name="viewport"][content*="width=device-width"]')) ? 'yes' : 'no') + '&params=' 

예 :
Mozilla\/5.0 (Linux; U; Android 4.3; en-us; HUAWEI G620-L72 Build\/HuaweiG620-L72) AppleWebKit\/534.24 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.24 T5\/2.0 bdbrowser\/6.1.0.4

Mozilla\/5.0 (Linux; U; Android 4.4.3; en-ae; HTC_One Build\/KTU84L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30

Mozilla\/5.0 (Linux; U; Android 4.3; en-us; GT-I9300 Build\/JSS15J) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30

. ..

때때로 이상한 URL이 location.href에 의해 생성되었으며 그 이유가 무엇인지 알 수 없습니다. 예를 들어 : http://saten.ir/tag/%D8%A8%DB%8C%D9%88%DA%AF%D8%B1%D8%A7%D9%81%DB%8C-%D8%A7%D9%85%DB%8C%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3-%D9%81%D8%AE%D8%B1%D8%A2%D9%88%D8%B1/

그러나 location.href에 의해 반환 된 URL은 다음과 같습니다 :
http://www.google.com/search?site=&source=hp&ei=mpkeWIvHKYWbsgGtxaSQBg&q=%D8%A7%D9%85%D9%8A%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3+%D9%81%D8%AE%D8%B1%D8%A7%D9%88%D8%B1&oq=%D8%A7%D9%85%D9%8A%D8%B1%D8%B9%D8%A8%D8%A7%D8%B3+%D9%81%D8%AE%D8%B1%D8%A7%D9%88%D8%B1&gs_l=mobile-gws-hp.3...4752.15339.0.16567.0.0.0.0.0.0.0.0..0.0....0...1c.1.64.mobile-gws-hp..0.0.0.UFWL1tf4KDM#scso=uid_WB6ZrwAGHJ0KLAXLjA8j8w_10:2120,uid_WB6aQQAGpZkKLNwFPgmnbA_10:2120

+0

을 - window.location.href 항상 내가 생각 할 수있는 현재 페이지가 유일한 인스턴스를 url로 반환해야 HTML5 기록 API를 사용하여 변경된 경우가 아닐 수 있습니다. 이 문제를 일으키는 데 사용 된 특정 브라우저 또는 프로세스가 있습니까? – Brian

+0

@Brian 답변을 주셔서 감사합니다. 클라이언트 사용자 에이전트를보기 위해 로그에 추가 옵션을 추가하고 가능한 한 빨리 알려 드리겠습니다. –

+0

@Brian 클라이언트 UA의 몇 가지 예가 –

답변

2

var myurl = location.origin + decodeURIComponent(location.pathname); 

을 시도 기본적으로이다

홈페이지 URL 뭔가 다음과 같다 location.href와 동일하지만 작동해야합니다.

+0

@Hossein Shahsahebi 당신은 이것을 점검 할 시간이 있었습니까? – Emiliano

0

실제로 버그를 재현 할 수 없었습니다. 몇 가지 테스트에서 올바른 location.href를 얻었습니다.

제가 생각할 수있는 유일한 문제는 클래스를 만들 때 링크를 만드는 것입니다.

var my_obj = { 
    /*...*/ 
    url: "http://sd.domain.ir/index.php?r=" + Math.floor(Math.random() * (1e8 + 1)) + "0&ref=" + (window.btoa ? btoa(location.href) : "ie") + "&responsive=" + (document.querySelector('meta[name="viewport"][content*="width=device-width"]') ? "yes" : "no") + "&params=", 
    /*...*/ 
} 
my_obj.init(); 

이가의 .js 파일을로드 할 때 url 실제로 채워지는 것을 의미처럼 지내요.

안드로이드 브라우저의 이전 버전에서 location.href가 변경되기 전에 실제로 스크립트를로드하거나 다음 페이지의 브라우저로드 내용과 같은 일종의 프리 페치가있는 경우와 같이 확실히 얻을 수있는 참조 자입니다. 실제로 다음 페이지로 이동하기 전에).

dom을로드 한 후 location.href를 가져 오는 것이 좋습니다. 당신은 href가 도착하기 전에 당신이 어떤 상태 확인을 시도 할 수 있습니다 : 나는 크롬에서 문제를 복제 할 수 없습니다

var my_obj = { 
    init: function(){ 
      my_obj.url = "http://sd.domain.ir/index.php?r=" +Math.floor(Math.random() * (1e8 + 1)) + "0&ref=" + (window.btoa ? btoa(location.href) : "ie") + "&responsive=" + (document.querySelector('meta[name="viewport"][content*="width=device-width"]') ? "yes" : "no") + "&params="; 
    } 
    /*...*/, 
    url: "" 
} 

if(document.readyState == "uninitialized" || document.readyState == "loading " || document.readyState == "loaded"){ 
    document.onreadystatechange = function(){ 
     if (document.readyState == "interactive") { 
      my_obj.init(); 
     } 
    } 
}else{ 
    my_obj.init(); 
} 
+0

답장을 보내 주셔서 감사합니다. 그러나 문제가 'readystatechange'에서 'url_show'를 시작하는 것이 너무 늦어서 변수를 사용할 수 없습니다. –

+0

하지만 늦게까지이 변수를 처리하도록 코드를 변경했습니다. –

+1

@HosseinShahsahebi 미리 초기화되지 않은 상태에서로드되거나로드되기까지 readystate를 기다리는 경우 작동하도록 할 수 있는지 물어볼 것입니다. 더 나은 점은 init 함수를 확인할 수 있습니다. 현재 상태에 대해 즉시 작성해야하는지 기다려야하는지 확인하십시오. – Kesty