문제

많은 매개 변수가있는 양식으로 ajax 양식을 게시하려면 iframe, 포스트로 양식을 게시 한 다음 액세스 iframe의 내용. 구체적으로, 나는 다음과 같은 내용에 액세스하고 있습니다.

$("some_iframe_id").get(0).contentWindow.document

나는 그것을 테스트했고 그것은 효과가 있었다.

일부 페이지에서 "액세스가 거부 된"오류를 얻기 시작했습니다. 내가 아는 한, iframe이 동일한 도메인에서 제공되는 경우에는 일어나지 않아야합니다.

나는 그것이 전에 일하고 있다고 확신합니다. 아무도 단서가 있습니까?

내가 충분히 명확하지 않다면 : 나는 같은 도메인. 따라서 이것은 크로스 도메인 요청이 아닙니다. IE에 대해서만 테스트하고 있습니다.

추신 : 간단한 ajax 포스트 쿼리를 사용할 수 없습니다 (묻지 마십시오 ...)

도움이 되었습니까?

해결책

혼자서 해결했습니다!

문제는 올바른 응답이 발송되었지만 (피들러로 확인) HTTP 500 오류 코드 (200 대신)와 함께 전송되었다는 것입니다.

따라서 응답이 오류 코드로 전송되면 즉 iframe 디스크에서로드 된 오류 메시지가 있습니다 (res://ieframe.dll/http_500.htm), 이로 인해 크로스 도메인 액세스 거부 오류가 발생합니다.

다른 팁

관련된 보안 제한을 조심하십시오 iframes, 처럼 크로스 도메인 제한 (일명 Cors). 아래는 CORS와 관련된 3 가지 일반적인 오류입니다.

  1. 다른 도메인으로 iframe을로드하십시오. (예 : 오프닝 "www.foo.com"상단 프레임은"www.ooof.com")

  2. 다른 포트로 iframe을로드하십시오 : iframe의 URL 포트 상단 프레임 중 하나와 다릅니다.

  3. 다른 프로토콜 : HTTPS를 통해 iframe 리소스로드하는 동안 부모 프레임은 HTTP를 사용합니다.

내 문제는 X-Frame-Options HTTP 헤더. 내 Apache 구성이 다음으로 설정되어 있습니다.

Header always append X-Frame-Options DENY

그것을 제거하면 작동 할 수 있습니다. 특히 제 경우에는 jQuery 파일 업로드 플러그인과 함께 jQuery 용 iframe Transport를 사용하여 IE 9 및 IE 10의 파일을 업로드했습니다.

나는이 질문이 매우 오래되었음을 알고 있지만 위의 답변이 나에게 효과가 있다고 언급하고 싶었습니다. 문서를 설정합니다. 각 페이지에서 모인 페이지와 iframe 페이지에서 동일합니다. 그러나 내 검색에서 나는이 흥미로운 기사를 찾았습니다.

http://softwareas.com/cross-domain-communication-with-iframes

iframe이있는 경우 참고 src='javascript:void(0)' 그런 다음 JavaScript와 같은 frame.document.location =... IE의 액세스 거부 오류로 실패합니다. 대상 프레임과 상호 작용하는 JavaScript 라이브러리를 사용하고있었습니다. 프레임을 변경하려는 위치는 부모와 동일한 도메인에 있었지만 Iframe은 처음에 JavaScript로 설정되었습니다.

이것을 해결하기 위해 내 사이트에서 blank.html 페이지를 만들었고 JavaScript를 통해 변경 될 때까지 처음 공백이 될 Iframe을 미리 선언 해야하는 경우 빈 페이지를 가리켜서 src='/content/blank.html' 같은 도메인에 있습니다.

또는 SRC가 생성 될 때 SRC를 설정할 수 있도록 JavaScript를 통해 Iframe을 완전히 만들 수 있지만, 제 경우에는 IFRAME을 이미 페이지에서 신고 한 라이브러리를 사용하고있었습니다.

기본적 으로이 오류는 II의 프레임 및 외부의 문서에 다른 도메인이있을 때 발생합니다. 따라서 크로스 사이드 스크립팅 브라우저를 방지하면 이러한 실행이 비활성화됩니다.

www.foo.com과 같은 도메인 문제 (또는 하위 도메인) 인 경우 www.api.foo.com에 요청을 보내십시오.

각 페이지에서 설정할 수 있습니다

document.domain = www.foo.com

"크로스 도메인"권한을 허용합니다

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