programing

iFrame이 로딩될 때 로딩 메시지를 표시하는 방법?

muds 2023. 9. 13. 23:58
반응형

iFrame이 로딩될 때 로딩 메시지를 표시하는 방법?

로드 속도가 매우 느린 타사 웹 사이트를 로드하는 프레임이 있습니다.

프레임이 로드되면 사용자에게 큰 공백이 보이지 않는 동안 로드 메시지를 표시할 수 있는 방법이 있습니까?

추신. iframe은 타사 웹사이트를 위한 것이기 때문에 그들의 페이지를 수정/주입할 수 없습니다.

저는 다음과 같은 CSS 접근 방식을 수행했습니다.

<div class="holds-the-iframe"><iframe here></iframe></div>

.holds-the-iframe {
  background:url(../images/loader.gif) center center no-repeat;
}

코드가 도움이 될 이라고 생각합니다.

JS:

$('#foo').ready(function () {
    $('#loadingMessage').css('display', 'none');
});
$('#foo').load(function () {
    $('#loadingMessage').css('display', 'none');
});

HTML:

<iframe src="http://google.com/" id="foo"></iframe>
<div id="loadingMessage">Loading...</div>

CSS:

#loadingMessage {
    width: 100%;
    height: 100%;
    z-index: 1000;
    background: #ccc;
    top: 0px;
    left: 0px;
    position: absolute;
}

자리 표시자만 달성하려는 경우: 미친 접근 방식은 텍스트를 svg 배경으로 주입하는 것입니다.이를 통해 어느 정도의 유연성을 확보할 수 있으며, 브라우저 지원은 꽤 괜찮은 것으로 알고 있습니다(테스트는 하지 않았지만).

  • 크롬 >= 27
  • 파이어폭스 >= 30
  • Internet Explorer >= 9
  • 사파리 >= 5.1

html:

<iframe class="iframe-placeholder" src=""></iframe>

CSS:

.iframe-placeholder
{
   background: url('data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 100% 100%"><text fill="%23FF0000" x="50%" y="50%" font-family="\'Lucida Grande\', sans-serif" font-size="24" text-anchor="middle">PLACEHOLDER</text></svg>') 0px 0px no-repeat;
}

무엇을 바꿀 수 있습니까?

배경 값 내부:

  • 글꼴 크기: 글꼴 크기=""를 찾아 원하는 대로 값을 변경할 수 있습니다.

  • 글꼴 색상: fill=""을 찾습니다.16진수 색상 표기법을 사용하는 경우 #를 %23으로 바꾸는 것을 잊지 마십시오. %23은 svg 문자열을 FireFox에서 구문 분석하는 데 필요한 URL 인코딩의 #를 나타냅니다.

  • font family: font-family를 찾아보세요="" 여러 단어로 구성된 글꼴이 있는 경우(예: \'Lucida Grande\') 작은 따옴표를 피해가도록 기억하세요.

  • text: PLACEHOLDER 문자열이 표시되는 텍스트 요소의 요소 값을 찾습니다.PLACEHOLDER 문자열을 url 호환되는 모든 문자열로 바꿀 수 있습니다(특수 문자를 백분율 표기법으로 변환해야 함).

fiddle에 대한 예제

장점:

  • 추가 HTML 요소 없음
  • 아니요 js
  • 외부 프로그램 없이 텍스트를 쉽게(...) 조정할 수 있습니다.
  • SVG라서 원하는 SVG를 손쉽게 넣을 수 있습니다.

단점:

  • 브라우저 지원
  • 복잡합니다.
  • 까칠까칠해요.
  • iframe-src에 배경 세트가 없는 경우 자리 표시자가 다음을 통해 빛납니다(이 메서드는 이 메서드에 고유한 것이 아니라 iframe에서 bg를 사용할 때 표준 동작일 뿐입니다).

약간의 유연성이 필요한 iframe에서 텍스트를 자리 표시자로 표시해야 하는 경우에만 이를 권장합니다(다국어, ...).잠시 시간을 갖고 생각해 보세요: 이 모든 것이 정말로 필요한가요?선택의 여지가 있다면 @크리스티나의 방법을 택할 겁니다.

대안적인 해결책.

<iframe srcdoc="Loading..." onload="this.removeAttribute('srcdoc')" src="https://example.com"></iframe>

srcdoc 속성은 HTML 마크업을 가질 수 있습니다.따라서 사용자 지정 스타일을 메시지에 적용할 수 있습니다.

<iframe id="example" src="https://example.com"></iframe>
<script>
  const iframe = document.getElementById('example');
  iframe.srcdoc = '<!DOCTYPE html><p style="color: green;">Loading...</p>';
  iframe.addEventListener('load', () => iframe.removeAttribute('srcdoc'));
</script>

대부분의 경우에 대한 빠른 해결책은 다음과 같습니다.

CSS:

.iframe-loading { 
    background:url(/img/loading.gif) center center no-repeat; 
}

원하는 경우 애니메이션 로딩 GIF를 사용할 수 있습니다.

HTML:

<div class="iframe-loading">
    <iframe src="http://your_iframe_url_goes_here"  onload="$('.iframe-loading').css('background-image', 'none');"></iframe>
</div>

소스 페이지가 iframe 내부에 로드된 후 onload 이벤트를 사용하여 로딩 이미지를 제거할 수 있습니다.

jQuery를 사용하지 않는 경우 div에 id를 입력하고 코드의 다음 부분을 바꿉니다.

$('.iframe-loading').css('background-image', 'none');

다음과 같은 방법으로.

document.getElementById("myDivName").style.backgroundImage = "none";

좋은 일만 가득하시길요!

$('iframe').load(function(){
      $(".loading").remove();
    alert("iframe is done loading")
}).show();


<iframe src="http://www.google.com" style="display:none;" width="600" height="300"/>
<div class="loading" style="width:600px;height:300px;">iframe loading</div>

예, iframe 영역 위에 위치한 투명한 div를 사용할 수 있으며, loader gif만 배경으로 사용할 수 있습니다.

그러면 당신은 다음을 첨부할 수 있습니다.onloadiframe에:

 $(document).ready(function() {

   $("iframe#id").load(function() {
      $("#loader-id").hide();
   });
});

아래 코드를 이용하시면 됩니다.

 iframe {background:url(../images/loader.gif) center center no-repeat; height: 100%;}

저는 다음과 같은 접근법을 따라왔습니다.

먼저 형제 div를 추가합니다.

$('<div class="loading"></div>').insertBefore("#Iframe");

iframe이 로딩을 완료했을 때

$("#Iframe").load(function(){
   $(this).siblings(".loading-fetching-content").remove(); 
  });
<!DOCTYPE html>
<html>
<head>
<title>jQuery Demo - IFRAME Loader</title>
<style>
#frameWrap {
    position:relative;
    height: 360px;
    width: 640px;
    border: 1px solid #777777;
    background:#f0f0f0;
    box-shadow:0px 0px 10px #777777;
}

#iframe1 {
    height: 360px;
    width: 640px;
    margin:0;
    padding:0;
    border:0;
}

#loader1 {
    position:absolute;
    left:40%;
    top:35%;
    border-radius:20px;
    padding:25px;
    border:1px solid #777777;
    background:#ffffff;
    box-shadow:0px 0px 10px #777777;
}
</style>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>

<div id="frameWrap">
<img id="loader1" src="loading.gif" width="36" height="36" alt="loading gif"/>
<iframe id="iframe1" src="https://bots.actcorp.in/ACTAppChat/chat?authtext=test@user8.com&authToken=69d1afc8d06fb97bdb5a9275edbc53b375c3c7662c88b78239ba0cd8a940d59e" ></iframe>
</div>
<script>
    $(document).ready(function () {
        $('#iframe1').on('load', function () {
            $('#loader1').hide();
        });
    });
</script>

</body>
</html>

아래와 같이 사용 가능합니다.

$('#showFrame').on("load", function () {
        loader.hide();
});

언급URL : https://stackoverflow.com/questions/8626638/how-to-display-loading-message-when-an-iframe-is-loading

반응형