본문 바로가기
프로그램

jquery 부모 프레임 특정 class 존재 유무 체크

by 다온다올과함께 2025. 2. 6.

 

 

jQuery를 사용하여 자식 페이지(iframe 내부)에서 부모 프레임(iframe을 포함한 페이지)의 특정 클래스 존재 여부를 확인하려면 다음 단계를 따릅니다. 동일 출처 정책(Same-Origin Policy)을 준수해야 하며 자식과 부모가 동일한 도메인, 프로토콜, 포트에 있어야 가능합니다.


 

1. 기본 코드 (부모 프레임의 클래스 확인)

아래는 부모 페이지의 특정 요소에 특정 클래스가 있는지 확인하는 코드입니다.

$(document).ready(function () {
  // 부모 페이지에서 특정 요소를 선택
  var parentHasClass = $(window.parent.document).find("#parentElement").hasClass("targetClass");

  if (parentHasClass) {
    console.log("부모 프레임의 #parentElement에 'targetClass' 클래스가 존재합니다.");
  } else {
    console.log("부모 프레임의 #parentElement에 'targetClass' 클래스가 존재하지 않습니다.");
  }
});

 

코드 설명

  1. $(window.parent.document)
    • 부모 프레임의 DOM에 접근합니다.
  2. .find("#parentElement")
    • 부모 프레임에서 id="parentElement"인 요소를 찾습니다.
  3. .hasClass("targetClass")
    • 해당 요소에 targetClass가 존재하는지 확인합니다.

 

2. 다양한 상황별 코드

 

부모 페이지의 body에 클래스 확인

$(document).ready(function () {
  if ($(window.parent.document.body).hasClass("targetClass")) {
    console.log("부모 프레임의 <body>에 'targetClass'가 존재합니다.");
  } else {
    console.log("부모 프레임의 <body>에 'targetClass'가 없습니다.");
  }
});

 

부모 페이지의 여러 요소 중 하나에 클래스 확인

$(document).ready(function () {
  var parentHasClass = $(window.parent.document).find(".someClass").length > 0;

  if (parentHasClass) {
    console.log("부모 프레임에 'someClass' 클래스가 있는 요소가 하나 이상 존재합니다.");
  } else {
    console.log("부모 프레임에 'someClass' 클래스가 없습니다.");
  }
});

 

3. 다른 출처일 때(PostMessage API 사용)

부모와 자식이 다른 출처일 경우 직접 접근할 수 없으므로 PostMessage API를 사용해야 합니다.

 

부모 페이지 코드

// 자식 페이지에서 요청 수신
window.addEventListener("message", function (event) {
  if (event.origin !== "자식 페이지의 도메인") return; // 안전성 확인
  if (event.data === "checkClass") {
    // 클래스 존재 여부 확인
    var hasClass = document.querySelector("#parentElement").classList.contains("targetClass");
    event.source.postMessage({ hasClass: hasClass }, event.origin);
  }
});

 

자식 페이지 코드

// 부모에게 클래스 존재 여부 요청
window.parent.postMessage("checkClass", "부모 페이지의 도메인");

// 부모로부터 응답 수신
window.addEventListener("message", function (event) {
  if (event.origin !== "부모 페이지의 도메인") return; // 안전성 확인
  if (event.data.hasClass) {
    console.log("부모 프레임에 'targetClass'가 존재합니다.");
  } else {
    console.log("부모 프레임에 'targetClass'가 존재하지 않습니다.");
  }
});

 

요약

  • 동일 출처: $(window.parent.document)로 부모 DOM에 접근해 클래스 존재 여부를 확인합니다.
  • 다른 출처: PostMessage API를 사용해 부모와 자식 간 안전하게 데이터를 주고받습니다.

 

 

 

 

#jquery #부모페이지특정클래스존재유무확

반응형

댓글