none
firefox에서 실버라이트 프로그램이 리로딩 되는 현상 RRS feed

  • 질문

  • 안녕하세요

    아래와 같은 조건에서 firefox에서 실버라이트 프로그램이 재 로딩 되는 현상이 발생합니다.

    1. 단순한 실버라이트용 어플을 구현, 작동되는 페이지를 구성한다.
    2. 1
    의 페이지를 src로 사용하는 iframe이 포함된 html 페이지를 구성한다.
    3. 2
    iframe style.display의 값을 'none', 'block' 을 번갈아 가며 전환해본다.

    이 현상을 피하기 위해 opacity 또는 visibility 를 사용할 수도 있지만,

    이 현상이 실버라이트의 버그인지, firefox의 버그인지,

    정확한 원인 무엇인지 알고 싶습니다.

    재현용 소스설명

    index.html

    FirefoxIssueTestPage.html

    FirefoxIssue.xap

    > MainPage.xaml, MainPage.xaml.cs

    파일첨부가 불가하여 아래와 같이 내용을 올립니다. 


    테스트에 사용된 html 코드

    index.html

    <html>

    <head>
        <title>FirefoxIssue</title>
        <script type="text/javascript">
         function toggle() {
          var obj = document.getElementById('ifrm');
       obj.style.display = (obj.style.display == 'none')?'block':'none';
         }
        </script>
    </head>
    <body>

     <input type="button" value="Run" onclick="toggle()" style=''/>
     
     <iframe id="ifrm" width="500px;" height="500px;" src="./FirefoxIssueTestPage.html">
     </iframe>

    </body>
    </html>

    실버라이트가 포함된 html페이지 FirefoxIssueTestPage.html

    <html>

    <head>
        <title>FirefoxIssue</title>
        <style type="text/css">
        html, body {
         height: 100%;
        
        }
        body {
         padding: 0;
         margin: 0;
        }
        #silverlightControlHost {
         height: 100%;
         text-align:center;
        }
        </style>
        <script type="text/javascript" src="Silverlight.js"></script>
        <script type="text/javascript">
            function onSilverlightError(sender, args) {
                var appSource = "";
                if (sender != null && sender != 0) {
                  appSource = sender.getHost().Source;
                }
               
                var errorType = args.ErrorType;
                var iErrorCode = args.ErrorCode;

                if (errorType == "ImageError" || errorType == "MediaError") {
                  return;
                }

                var errMsg = "Silverlight 응용 프로그램에서 처리되지 않은 오류 " +  appSource + "\n" ;

                errMsg += "코드: "+ iErrorCode + "    \n";
                errMsg += "범주: " + errorType + "       \n";
                errMsg += "메시지: " + args.ErrorMessage + "     \n";

                if (errorType == "ParserError") {
                    errMsg += "파일: " + args.xamlFile + "     \n";
                    errMsg += "줄: " + args.lineNumber + "     \n";
                    errMsg += "위치: " + args.charPosition + "     \n";
                }
                else if (errorType == "RuntimeError") {          
                    if (args.lineNumber != 0) {
                        errMsg += "줄: " + args.lineNumber + "     \n";
                        errMsg += "위치: " +  args.charPosition + "     \n";
                    }
                    errMsg += "메서드 이름: " + args.methodName + "     \n";
                }

                throw new Error(errMsg);
            }
        </script>
    </head>
    <body>
        <form id="form1" runat="server" style="height:100%">
        <div id="silverlightControlHost">
            <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/FirefoxIssue.xap"/>
        <param name="onError" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="5.0.61118.0" />
        <param name="autoUpgrade" value="true" />
        <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=5.0.61118.0" style="text-decoration:none">
          <img src=http://go.microsoft.com/fwlink/?LinkId=161376style:none"/>
        </a>
         </object><iframe id="_sl_historyFrame" style="height:0px;width:0px;border:0px"></iframe></div>
        </form>
    </body>
    </html>

    테스트에 사용된 실버라이트 코드 xaml

    <UserControl x:Class="FirefoxIssue.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        d:DesignHeight="300" d:DesignWidth="400">

        <Grid x:Name="LayoutRoot" Background="Gray">
      <StackPanel Width="300" HorizontalAlignment="Center" VerticalAlignment="Center">
       <TextBlock TextWrapping="Wrap" Foreground="White" FontSize="15">Firefox 브라우저에서 IFRAME의 소스로 실버라이트 페이지를 지정 후
       IFRAME의 style.display를 none으로 변경 후 다시 block으로 변경 할 경우
       실버라이트가 재로딩 되는 현상.
       </TextBlock>
      </StackPanel>  
        </Grid>
    </UserControl>

    테스트에 사용된 비하인드코드

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;

    namespace FirefoxIssue
    {
     public partial class MainPage : UserControl
     {
      public MainPage()
      {
       InitializeComponent();

       MessageBox.Show("이 메세지는 실버라이트 테스트 샘플 이 로딩될때 나타납니다.");
      }
     }
    }

    그럼 수고하세요

    2014년 1월 20일 월요일 오전 6:57

답변

모든 응답

  • 안녕하세요.

    아래 내용을 참고해 보시기 바랍니다.

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

    Hide and Show Container Element of Silverlight Will Cause Reload on Browsers Besides IE

    http://blog.darkthread.net/post-2010-07-14-silverlight-reload-when-revisible.aspx


    In IE8, it's true! No matter how many times you press btnHide and btnShow, you will get only once "Silverlight Loaded!" popup.  But in browsers besides IE, each time you press btnShow to make Sivlerlight object visible again, you get one "Silverlight Loaded!" popup. I have tested this on Chrom, Firefox, Safari and Opera, the Silverlight seems reloaded each time when its container becomes visible from hidden status.  So, remember to check your logic when you try to toggle the visibility of Silverlight host.




    Trisha


    • 편집됨 Trisha eun 2014년 1월 20일 월요일 오전 8:03
    2014년 1월 20일 월요일 오전 8:03
  • 안녕하세요. 답변 감사합니다.

    혹시 해당 현상을 위한 workaround 보다는

    원인이 무엇인지 알수있을가요?

    실버라이트의 알려진 버그인지 알고싶습니다.

    내용을 피해 구현하기에 앞서 원인에 대해 이해하고 인지하고 싶은데 자료 또는 근거가 될 페이지를

    찾을수가 없네요.

    날씨가 많이 춥습니다.

    감기 조심하세요.

    2014년 1월 21일 화요일 오전 12:03
  • 안녕하세요. 위에 강조표시하여 올려 드린 글을 보면 익스플로러 뿐 아니라 Chrom, Firefox, Safari, Opera 에도 리로드 된다고 하니 파어어폭스에 대한 문제만은 아닌 것 같구요.

    관련 정보를 찾아보니 실버라이트의 오류라기 보다,

    div가 히스토리에 실버라이트 플러그 인 오브젝트와 아이프레임을 같이 가지고 있어 호출시 발생하는 이슈인 것 같습니다.

    대부분 해결책으로 window.focus 나, visibility 사용을 권하네요.

    자세한 내용은 아래 포스팅 및 포럼을 참고해 보시기 바랍니다.

    >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


    Hide and Show Container Element of Silverlight Will Cause Reload on Browsers Besides IE

    http://social.msdn.microsoft.com/Forums/silverlight/en-US/3809422a-8c2a-49a9-b3a4-b09a53455832/hide-and-show-container-element-of-silverlight-will-cause-reload-on-browsers-besides-ie?forum=silverlightjavascript


    change the visibility of silverlight control's parent node, the silverlight control got reloaded

    http://stackoverflow.com/questions/10411322/change-the-visibility-of-silverlight-controls-parent-node-the-silverlight-cont


    Trisha



    • 편집됨 Trisha eun 2014년 1월 21일 화요일 오전 2:23
    • 답변으로 표시됨 sil5 2014년 1월 23일 목요일 오전 2:43
    2014년 1월 21일 화요일 오전 2:22
  • 안녕하세요. 답변 감사합니다.

    이미 최초 질문 이전에 visibility로 현상이 발생안되게 처리해논 상태이고

    아래와 같은 환경으로 테스트 결과 확인 한 상태 에서 질문을 올렸습니다.

    ---------------------------------

    샘플 코드 기준

    IE11 : 정상
    Chrome : 정상
    Opera : 정상

    FireFox : 리로딩 현상 발생

    ---------------------------------

    원인이 무엇인지 알수있을가요?

    실버라이트의 알려진 버그인지 알수있는 경로가 있는지 궁금합니다.

    MSDN 구독중인 상태여서 기술지원을 요청할려고 해도 전화도 연결되지 않고,

    메일로 대응되는 내용은 실버라이트 설치 관련 기술지원 외에는 안된다고 하니 답답하네요.

    그저 피해가는 방법에 대해서만 알아야 되는 상황이라면 참으로 안타까운 현실이네요.

    안그래도 실버라이트 활성화가 안되어가는 현재 시점에서 말이죠.

    답변 감사합니다.

    2014년 1월 21일 화요일 오전 9:42
  • 위에 말씀드린 답변들에 어느정도의 답이 있다고 생각하는데요.

    실버라이트 오류라기 보다, div가 히스토리에 실버라이트 플러그 인 오브젝트와 아이프레임을 같이 가지고 있어 호출시 발생하는 이슈인 것 같습니다.

    웹 프로그래밍 이슈에는 여러가지가 있을 수 있습니다.

    첨부해 드렸던 url 내용들에 관련 토론 내용이 있으니 살펴 보시기 바랍니다.

    또는 관련 키워드로 직접 살펴 보셔도 좋으실 듯 합니다.

    감사합니다.


    Trisha

    2014년 1월 21일 화요일 오전 11:54
  • 안녕하세요 답변감사합니다.

    div가 히스토리에 실버라이트 플러그 인 오브젝트와 아이프레임을 같이 가지고 있어 호출시 발생하는 이슈인 것 같습니다.

    위와같이 언급하신 근거자료가 어떤것인지 궁금합니다.

    명시해주신 url에는 저 상황이 원인이라는 내용을 찾을 수 없네요.

    상황을 기준으로 유추하신건가요? 

    관련 키워드로 검색을 해봤지만 유사한 현상 또는 팁에 대한 내용 뿐 원인에 대한 내용은 찾기가 어렵네요.

    아니 내용이 없는거 같습니다. :)

    현상에 대한 정확한 원인을 알고 싶은 마음에 질문드리는 것이니 혹시라도

    기분이 상하는 일 없으셨음 좋겠습니다.

    답변 감사합니다.

    2014년 1월 22일 수요일 오전 1:30
  • 저 역시 관련 정보를 찾다가 유추된 내용을 말씀 드린 겁니다.

    제가 정확한 원인 자체를 제공해 드릴 수 있는 입장은 아니네요.

    아이프레임과 실버라이트 이슈에 관련해서는 많은 정보들이 있습니다.

    드릴 수 있는 답변은 여기까지 인 것 같네요.

    잘 해결 되길 바랍니다.


    Trisha

    2014년 1월 22일 수요일 오전 4:49
  • 답변 감사합니다.

    좋은하루 되세요.

    2014년 1월 23일 목요일 오전 2:34