하이브리드 iframe-proxy/xsl/jsonp 개념을 사용하여 JavaScript로 크로스 도메인 XML로드?
-
18-09-2019 - |
문제
우리 사이트에서 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, 형식 및 콜백 만 지정하십시오
- jQuery를 사용한 크로스 도메인 요청 James Padolsey
- jQuery 플러그인
그것은 일종의 서버 측 솔루션이지만 서버에 있지 않습니다 :)