programing

교차 도메인 iframe의 DOM 콘텐츠 가져오기

lovejava 2023. 9. 1. 20:21

교차 도메인 iframe의 DOM 콘텐츠 가져오기

교차 도메인 사이트에 대한 iframe을 가지고 있습니다.인스펙터를 사용하면 iframe의 DOM까지 수정할 수 있기 때문에 가능하다고 믿었던 iframe의 DOM을 읽고 싶습니다.하지만 제가 그것을 읽으려고 할 때마다, 저는 같은 출처 정책에 부딪힙니다.제가 원하는 것은 iframe에서 로컬 DOM에 로드된 콘텐츠입니다.나는 그것이 매우 간단할 것이라고 생각했습니다.$(document.body).find('iframe').html()하지만 그것은 빈 끈을 돌려주는 것입니다.

지난 며칠 동안 제가 해온 일이 이것이 할 수 있는 것을 전제로 했기 때문에 저는 정말로 이것을 할 수 있는 방법이 있기를 바랍니다.

감사해요.

그럴수는 없어요.XSS 보호.사이트 간 내용을 Javascript로 읽을 수 없습니다.어떤 주요 브라우저도 이를 허용하지 않습니다.죄송합니다만, 이것은 디자인상의 결함입니다, 당신은 그 아이디어를 포기해야 합니다.

편집

iframe에 로드된 웹 사이트에 대한 편집 권한이 있는 경우 postMessage를 사용할 수 있습니다(브라우저 호환성도 참조).

간단한 방법이 있습니다.

  1. 당신은 "the-site-you-want-to-get.com/unicorn ://http://your-domain.com/index.php?url=http "와 같은 소스를 가진 iframe을 만듭니다.

  2. 그런 다음 이 URL을 다음과 같이 가져옵니다.$_GET내용을 표시합니다.file_get_contents($_GET['url']);

당신은 당신과 같은 도메인을 가진 iframe을 얻을 것이고, 그러면 당신은 사용할 수 있을 것입니다.$("iframe").contents().find("body")내용을 조작할 수 있습니다.

iframed 페이지에 액세스할 수 있다면 easyX와 같은 것을 사용할 수 있습니다.iframe에서 함수 호출을 하고 데이터를 반환하는 DM.

iframed 페이지에 액세스할 수 없는 경우 서버 측 솔루션을 사용해야 합니다.PHP를 사용하면 다음과 같은 빠르고 더러운 작업을 수행할 수 있습니다.

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 

로드된 도메인/iframe에 대한 액세스 권한이 있는 경우 window.postMessage를 사용하여 iframe과 기본 창 간에 통신할 수 있습니다.

iframe에서 JavaScript로 DOM을 읽고 postMessage를 통해 상단 창으로 전송합니다.

자세한 내용은 https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage 에서 확인할 수 있습니다.

그것을 달성하기 위한 해결책이 있습니다.

  1. 먼저 iframe을 상대 URL로 대상 페이지에 바인딩합니다.브라우저는 웹 사이트와 동일한 도메인의 iframe에 있는 사이트를 처리합니다.

  2. 웹 서버에서 다시 쓰기 모듈을 사용하여 상대 URL에서 절대 URL로 요청을 리디렉션합니다.만약 당신이 IIS를 사용한다면, IIRF 모듈을 확인하는 것을 참조하십시오.

언급URL : https://stackoverflow.com/questions/6170925/get-dom-content-of-cross-domain-iframe