2009-05-29 2 views
40

자바 스크립트 페이지에서 RESTful 웹 서비스 호출을하고 다음 경고를받습니다.Google지도 API를 사용할 때 왜 '동일한 출처 정책'경고가 표시되지 않습니까?

"이 페이지는 보안상의 위험이 따릅니다. 계속 하시겠습니까? "

이제 이것을 읽었으며 cross-domain, same origin policy에 대해 알고 있습니다. 그러나 Google의 Maps API와 같은 다른 API를 사용하면 이러한 경고가 표시되지 않습니다. 분명히 도메인은 내 로컬 도메인과 동일하지 않습니다. 그 차이점은 무엇입니까?

내가 처음 사용하는 동안 XML은 <script> 태그를 사용하여 Google에 '가져 오기'가되고 XMLHttpRequest를 사용한다고 가정합니다. 그렇다면이 두 가지 접근법의 차이점은 경고를받을만한 것이고 다른 하나는 그렇지 않다는 것입니다. 일을 설명 할 수

+0

는 Fiddler2 같은 도구를 확인하고이 정말 나를 위해 작동하지 않았다 마법 – epascarello

+0

를보고 : 여기

클라이언트 HTML 페이지가 마지막에 어떻게 보일까이다. 나는 그것을 시도하고 여전히 크롬과 파이어 폭스에서 허가 오류를 부정했다. – Merritt

+0

@Merritt - 이것을 디버깅해야 할 것입니다. 웹 브라우저에서 프록시 페이지를 탐색하면 내용이 JavaScript 호출 인 텍스트를 다시 가져 옵니까? –

답변

5

다음 : http://markmail.org/message/5wrphjwmo365pajy

는 또한, 그들은 (대신 XHR의, 예를 들어, 요청 된 데이터를 얻기 위해 DOM에 스크립트를 삽입하는) 일부 스크립트 해킹을 사용합니다.

+0

당신이 옳은 대답을 가진 용감한 영혼 인 것처럼 보입니다! 감사! 마지막 글은 다음에서 요약 블로그 게시물을주었습니다 : http://www.teamlalala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using- javascript/ –

+0

그 점을 지적 해 주셔서 감사합니다. 분명히 그들의 기술은 쿼리 문자열 매개 변수를 사용하여 대부분의 경우보다 관련성을 높여줌으로써 더욱 유용하게 사용될 수 있습니다. –

+2

귀하의 링크가 더 이상 유효하지 않습니다. 메일 그룹에 하나가 작동하지만. –

0

이 문제에 대한 해결책을 요약하고자합니다. 유용한 URL here을 찾을 수 있습니다.

JavaScript를 가져올 때 기본적으로 <script> 태그 페이지를 통해 코드를 주입합니다. 이 태그를 통해 가져온 항목은 전역 컨텍스트에서 즉시 실행됩니다. 따라서 JavaScript 파일을 전달하는 대신 HTML 태그가 아닌 페이지를 반환하는 웹 사이트에 URL을 전달하고 대신 코드에서 콜백을 호출하는 JavaScript 코드 텍스트를 반환하는 페이지를 전달합니다.

URL 매개 변수를 사용하면 페이지에 '콜백'이 반환 할 내용과 콜백에 들어가야하는 매개 변수를 알릴 수 있습니다. 예를 들어이이 평가

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script> 

의 'SRC'매개 변수에 의해 반환 된 페이지의 내용은 다음과 같습니다

서버 측에
myCallback(myParam); 

, 당신은보다 우선 해당 URL에서 사이트를 만들 것 OnLoad equivalent (사용중인 서버 측 언어와 함께). 페이지 HTML 대신 OnLoad는 위의 콜백 호출과 일치하도록 URL 매개 변수를 가져 와서 다시 Swizzle합니다.

대체가 수행되면 클라이언트가 페이지를로드 할 때 콜백이 즉시 호출됩니다. 이것의 이점은 'src'URL이 호스팅 된 페이지의 도메인과 일치 할 필요가 없다는 것입니다.

<script type="text/javascript"> 
    var myCallback = function(myParam) { 
     alert("this was called across domains!"); 
    }; 
</script> 
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param=myParam></script> 
관련 문제