하이브리드 iframe-proxy/xsl/jsonp 개념을 사용하여 JavaScript로 크로스 도메인 XML로드?

StackOverflow https://stackoverflow.com/questions/1875379

문제

우리 사이트에서 www.foo.com 다운로드하고 사용하고 싶습니다 http://feeds.foo.com/feed.xml JavaScript와 함께. 우리는 분명히 사용할 것입니다 액세스 제어 그러나 지원하지 않는 브라우저의 경우 다음을 폴백으로 고려하고 있습니다.

www.foo.com, 우리는 설정합니다 document.domain, 콜백 함수를 제공하고 피드를 (숨겨진)에로드하십시오. iframe:

document.domain = 'foo.com';
function receive_data(data) {
 // process data
};

var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);

feeds.foo.com, XSL을 추가하십시오 feed.xml 이를 사용하여 피드를 HTML 문서로 변환하는 document.domain 피드 데이터를 JSON으로 부모의 콜백 함수를 호출합니다.

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:template match="ROOT">
  <html><body>
   <script type="text/javascript">
    document.domain = 'foo.com';
    parent.receive_data([<xsl:apply-templates/>]);
   </script>
  </body></html>
 </xsl:template>
 <!-- templates that transform data into json objects go here -->
</xsl:stylesheet>

feeds.foo.com에서 XML을로드하는 더 좋은 방법이 있습니까? (.. 그리고 어떤 경우에는 실패할까요?)


발언

  • 이것은 Safari & Chrome에서 작동하지 않지만 두 지원 이후 액세스 제어 괜찮아.
  • 우리는 거의 또는 전혀 변화를 원하지 않습니다 feeds.foo.com
  • 우리는 서버 측 프록시 솔루션을 알고 있습니다.
  • 업데이트: 그것에 대해 썼습니다
도움이 되었습니까?

해결책

두 도메인을 모두 제어 할 수있는 경우 다음과 같은 크로스 도메인 스크립팅 라이브러리를 사용해 볼 수 있습니다. EasyXDM, 크로스 브라우저 퀴크를 감싸고 해당 브라우저에 가장 적합한 메커니즘을 사용하여 다른 도메인 간의 클라이언트 스크립트에서 통신하기 쉬운 API를 제공합니다 (예 : 사후 관리 사용 가능한 경우 다른 메커니즘이 아닌 경우).

경고 : 도메인을 작동시키기 위해 두 도메인을 모두 제어해야합니다 ( "제어"는 두 도메인이 두 도메인에 정적 파일을 배치 할 수 있음을 의미합니다). 그러나 서버 측 코드 변경이 필요하지 않습니다.

또 다른 경고 : 여기에는 보안 영향이 있습니다. 다른 도메인의 스크립트를 신뢰하십시오!

다른 팁

Yahoo API를 사용할 수 있습니다 (YQL) .. URL, 형식 및 콜백 만 지정하십시오

그것은 일종의 서버 측 솔루션이지만 서버에 있지 않습니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top