2009-10-02 6 views
1

제 3 자 웹 사이트의 기사/기사 페이지에 포함될 '위젯'을 구현하고 있습니다. 이 위젯은 <iframe>에 있습니다. 부모 페이지 (제 3 자 웹 사이트)의 기사에서 텍스트를 수집해야합니다. 그러면 관련 콘텐츠를 반환하는 서비스에 대한 다양한 API 호출을 수행 한 다음 <iframe> 위젯에 표시됩니다.다른 도메인에서 호스팅되는 <iframe>에서 문서의 텍스트에 액세스

도메인 간 보안 제한으로 인해 상위 페이지의 DOM에 액세스 할 수 없으므로 문제가 있습니다. 부모 페이지 (예 : 필요한 콘텐츠를 파싱하는 일부 자바 스크립트)에 필요한 모든 코드를 배치 할 수 있으며 iframe >도 완전히 통제 할 수 있지만 어떻게해야할지 모르겠다. 호스트 페이지의 콘텐츠를 iframe >의 < 다른 도메인에 호스팅되어 있기 때문에 가져옵니다. 보안은 매우 중요하며 어떤 방식 으로든이를 손상시키지 않는 방법을 찾고 싶습니다.

<iframe src="http://www.mydomain.com/widget.html?page_content=This is some page content."></iframe> 

내가 부모 페이지에 < 스크립트 >을 사용할 수

내 초기 생각은 내 < iframe이 SRC = ""> 속성은 쿼리 매개 변수를 사용으로 상위 페이지에서 페이지 내용을 전달했다 텍스트를 수집 한 다음 내 텍스트를 포함하는 문자열을 사용하여 동적 "page_content"쿼리 매개 변수를 생성하는 인 < iframe을 document.write로 작성하십시오. page_content 매개 변수는 내 <iframe> 페이지의 document.href에서 사용할 수 있습니다.

그러나 부모 페이지에서 8KB의 텍스트를 수집해야하며 GET 요청에 1KB 제한이 있다는 사실을 알고 있습니다. 사실입니까? 그렇지 않은 경우 또는 서버에서 해당 제한을 구성 할 수 있으면 문제가 해결 될 가능성이 있습니다.

이것이 한계가 될 경우 어떻게하면 창의력을 발휘하고이 텍스트를 내 위젯에 전달할 수 있습니까? 상위 웹 사이트가 매월 수천만 건의 페이지 뷰를 확보하므로이 확장 성 솔루션은 매우 확장 가능해야합니다. 또한 부모 페이지의 성능에 중요한 영향을 미치기를 원하지 않습니다.

위젯에는 jQuery를 사용할 수 있지만 상위 페이지의 일반 자바 스크립트는 사용할 수 없습니다.

답변

0

GET 요청에 너무 많은 데이터가 있을까 염려하면 대신 POST 요청을 사용하십시오. 이 질문에 대한 답변과 같은 것을 시도 할 수 있습니다 : "How do you post to an Iframe?". 그런 다음 숨겨진 텍스트 영역에 데이터를 넣고 부모 페이지에 JavaScript를 사용하여 양식을 제출할 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. wdebeaum - 좋은 제안이지만 서버에 연결하여 <iframe> 위젯 내에서 해당 POST 데이터에 JavaScript에 액세스 할 수 있도록하는 것이 좋습니다. 위젯이 POST 데이터에 액세스 할 수있는 방법이 없다고 생각합니다. 성능이 중요하므로 가능한 경우 여분의 서버 트립을 피하고 싶습니다. 이 상황에서 GET 요청의 장점은 다른 도메인의 일부 텍스트 (쿼리 매개 변수)에 쉽게 액세스 할 수있는 수단으로 더 많이 사용된다는 것입니다. – Bungle

+0

POST 요청이 GET 요청과 관련하여 서버에 대한 추가 트립을 암시하는 방식을 이해하지 못합니다 ... 둘 다 iframe의 내용을 가져 오기 위해 서버로갑니다. 그런 다음 서버는 iframe의 JavaScript에 액세스 할 수있는 방식으로 질의 매개 변수 (GET 또는 POST)를 응답에 넣을 수 있습니다. 실제로 서버의 페이지를 요청하지 않고 iframe의 src 특성을 설정하는 것이 document.href 속성에 전파되어야한다고 말하면 사실입니다. – wdebeaum

0

실제로이 경우 name 속성을 사용할 수 있으며 많은 양의 데이터를 저장할 공간이 있습니다.

호스팅 페이지에서 먼저 iframe을 만들고 .name 속성에 필요한 데이터가 포함되도록 설정 한 다음 .src 속성을 설정하여 포함 된 사이트를로드합니다. 이제는 자체 이름에 액세스 할 수 있으므로 데이터가됩니다.

호스팅 사이트에서 부모 문서 데이터를 캡처하고 .name 속성을 넣은 다음 inteded 사이트로 리디렉션하는 iframe .src를 로컬 페이지로 먼저 설정해야 할 수 있습니다.

0

두 도메인을 모두 제어 할 수 있다면 EasyXDM과 같은 도메인 간 스크립팅 라이브러리를 사용할 수 있습니다.이 라이브러리는 브라우저 간 유사점 (Sean이 언급 한 이름 속성 포함)을 포함하며 사용하기 쉬운 API를 제공합니다. 해당 브라우저에 대해 가장 유용한 메커니즘을 사용하여 다른 도메인간에 클라이언트 스크립트로 통신합니다 (예 : 가능하다면 postMessage, 그렇지 않은 경우 다른 메커니즘).

경고 : 두 도메인을 모두 제어 할 필요가 있습니다 ("컨트롤"은 둘 모두에 정적 파일을 배치 할 수 있음을 의미). 그러나 서버 측 코드를 변경하지 않아도됩니다.

또 다른 경고 : 여기에는 보안과 관련된 의미가 있습니다. 다른 도메인의 스크립트를 신뢰하는지 확인하십시오!

관련 문제