[Javascript] 자바 스크립트에서 상위 iframe에 액세스하는 방법



Answers

액자 페이지에서 window.frameElement 를 호출하기 만하면됩니다. 페이지가 프레임 내에없는 경우, frameElementnull 됩니다.

다른 방법 (창 요소를 프레임 안에 넣는 것은 그리 간단하지는 않지만)을 위해서입니다.

/**
 * @param f, iframe or frame element
 * @return Window object inside the given frame
 * @effect will append f to document.body if f not yet part of the DOM
 * @see Window.frameElement
 * @usage myFrame.document = getFramedWindow(myFrame).document;
 */
function getFramedWindow(f)
{
    if(f.parentNode == null)
        f = document.body.appendChild(f);
    var w = (f.contentWindow || f.contentDocument);
    if(w && w.nodeType && w.nodeType==9)
        w = (w.defaultView || w.parentWindow);
    return w;
}
Question

같은 도메인 페이지를 호출하는 IFrame이 있습니다. 내 문제는 자바 스크립트에서 호출되는이 페이지의 부모 iframe에서 일부 정보에 액세스하려고한다는 것입니다. 이 Iframe에 액세스하려면 어떻게해야합니까?

세부 사항 : Windows 환경을 프로그래밍하기 때문에 동일한 페이지가로드 될 수있는 여러 개의 Iframe이 있습니다. 이 Iframe을 닫으려고합니다. 그래서 내가 그 내부에서 닫아야 할 부분을 알아야합니다. 이 Iframe에 대한 참조를 유지하는 배열이 있습니다.

편집 : Iframe 동적으로 생성됩니다.




부모 프레임에서 다음과 같이 IFRAME을 설정하십시오.

<iframe id="frame1" src="inner.html#frame1"></iframe>
<iframe id="frame2" src="inner.html#frame2"></iframe>
<iframe id="frame3" src="inner.html#frame3"></iframe>

각 프레임의 id는 src에서 앵커로 전달됩니다.

내부 HTML에서 location.hash를 통해로드 된 프레임의 ID에 액세스 할 수 있습니다.

<button onclick="alert('I am frame: ' + location.hash.substr(1))">Who Am I?</button>

parent.document.getElementById ()에 액세스하여 iframe 내부에서 iframe 태그에 액세스 할 수 있습니다.




이전 질문이지만 방금이 동일한 문제가 있었고 iframe을 가져 오는 방법을 발견했습니다. 부모 윈도우의 frames [] 배열을 반복하고 각 프레임의 contentWindow를 코드가 실행되는 윈도우에 대해 테스트하는 것만 큼 간단합니다. 예:

var arrFrames = parent.document.getElementsByTagName("IFRAME");
for (var i = 0; i < arrFrames.length; i++) {
  if (arrFrames[i].contentWindow === window) alert("yay!");
}

또는, jQuery를 사용하여 :

parent.$("iframe").each(function(iel, el) {
  if(el.contentWindow === window) alert("got it");
});

이 방법을 사용하면 각 iframe에 ID를 할당하는 시간을 절약 할 수 있습니다. ID는 동적으로 생성 될 때 유용합니다. window.parent를 사용하여 iframe 요소를 가져올 수 없기 때문에 더 직접적인 방법을 찾을 수 없습니다. iframe을 건너 뛰고 부모 창 요소로 곧장 이동합니다. 그래서 당신이 ID를 사용하고 싶지 않다면 그것들을 통해 반복하는 것이 유일한 방법 인 것 같습니다.




iframe의 id가 설정되면 아래와 같이 내부 문서에서 iframe에 접근 할 수 있습니다.

var iframe = parent.document.getElementById(frameElement.id);

IE, Chrome 및 FF에서 잘 작동합니다.




Links