WEB

브라우저 간 플러그 인 검색

AlrepondTech 2014. 6. 13. 15:31
반응형



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


출처: http://msdn.microsoft.com/ko-kr/library/ie/dn423948(v=vs.85).aspx


브라우저 간 플러그 인 검색

IE11부터 navigator 개체는 plugins 및 mimeTypes 속성을 지원합니다. 또한window.ActiveXObject 속성은 DOM에서 숨겨집니다. 즉, 더 이상 속성을 사용하여 IE11을 검색할 수 없습니다.

이제 플러그 인 검색 코드가 브라우저 간에 일치하며, Internet Explorer에 대해 특수 코드를 제공할 필요가 없습니다. 일관된 기술을 사용하도록 일부 웹 페이지를 업데이트해야 할 수 있으며, 새 속성에 적합한 정보를 사용할 수 있도록 일부 플러그 인이 해당 설치 루틴을 업데이트해야 할 수도 있습니다. 여기서 이 작업을 수행하는 방법을 알아봅니다.

효과적으로 플러그 인 검색

이러한 변경 내용은 다음 두 가지 방식 중 하나로 기존 사이트에서 플러그 인을 검색하는 방법에 영향을 줄 수 있습니다.

  1. 플러그 인이 설치된 경우에도 검색되지 않을 수 있습니다.

    사이트에서 window.ActiveXObject 속성을 사용하여 플러그 인이 있는지 확인하는 경우 대신 새 속성을 사용하도록 코드를 업데이트해야 합니다.

    var plugin = navigator.plugins["Contoso.Control"];
    if(plugin) {
    	// Contoso control is installed and enabled
    } else {
      try {
        plugin = new ActiveXObject("Contoso");
      } catch(e) {
        // Contoso control is not installed or disabled
      }
    }
    
    

    참고  이 예제와 같이 IE11은 ActiveXObject 개체 유형을 계속 지원하며, ActiveX 컨트롤을 인스턴스화하는 데 사용할 수 있습니다. 그러나 더 이상 window 개체의 속성으로 지원되지는 않습니다.

    웹 페이지가 다른 브라우저용 플러그 인을 검색하는 경우 해당 속성을 이미 사용했을 수도 있습니다. 이 경우 이 검색이 다른 형태의 검색 전에 발생하는지 확인합니다. 또한 기능을 검색하고 효과적인 대체를 제공하는지 확인합니다.

  2. 플러그 인이 navigator 속성에 정보를 보고하지 않을 수도 있습니다.

    새 속성을 지원하려면 설치 시 플러그 인에서 레지스트리를 업데이트해야 합니다.

    1. HKLM\SOFTWARE\Microsoft\Internet Explorer\NavigatorPluginsList 아래에 plugins 속성에서 보고될 이름을 사용하여 키를 만듭니다.
    2. MIME 형식 값을 하위 키의 이름으로 사용하여 플러그 인에서 지원되는 각 사용자 지정 MIME 형식에 대해 하위 키를 만듭니다.
    3. 64비트 환경의 경우 HKLM\SOFTWARE\Wow6432\Microsoft\Internet Explorer\NavigatorPluginsList에 동일한 레지스트리 항목을 추가합니다.
    4. 웹 페이지를 호스트하는 서버뿐 아니라 웹 페이지를 로드하는 장치에 고유한 MIME 형식이 올바르게 등록되었는지 확인합니다.

    예를 들어 Contoso Control이 "application/contoso" MIME 형식을 사용한다고 가정합니다. 이 경우 다음을 수행합니다.

    • HKLM\SOFTWARE\Microsoft\Internet Explorer\NavigatorPluginsList 아래에 "Contoso Control" 키를 추가합니다.

    • "application/contoso"라는 문자열 (REG_SZ) 하위 키를 만듭니다.

    • HKLM\SOFTWARE\Wow6432\Microsoft\Internet Explorer\NavigatorPluginsList에 동일한 키를 복사합니다(64비트 환경).

    또한 플러그 인(예: VERSIONINFO)을 만드는 데 사용되는 언어에 적합한 기술을 통해 플러그 인이 버전 세부 정보를 표시해야 합니다. 다음은 plugins 속성에서 반환된 플러그 인 개체의 속성으로 사용됩니다.

효과적으로 플러그 인 버전 검색

많은 플러그 인은 오랫동안 유지 관리되며, 사용자가 최신 버전을 설치했다는 보장은 없습니다. 다음 예제는plugin.version 속성을 사용하여 이를 처리하는 한 가지 방법을 보여 줍니다.

Silverlight.isInstalled = function (version) {
    if (version == undefined)
    {
        version = null;
    }

    var isVersionSupported = false;

    try
    {
        var tryOlderIE = false;

        // Detect installation on IE11 and non-IE browsers
        try 
        {
            var plugin = navigator.plugins["Silverlight Plug-In"];
            if (plugin)
            {
                // Plugin object exists - check for version argument
                if (version === null)
                {
                    // no string to parse - plugin is installed
                    isVersionSupported = true;
                }
                else
                {
                    // there is a string to parse - check if requested version is installed
                    var actualVerArray = actualVer.split(".");
                    while (actualVerArray.length > 3)
                    {
                        actualVerArray.pop();
                    }

                    while (actualVerArray.length < 4)
                    {
                        actualVerArray.push(0);
                    }

                    var reqVerArray = version.split(".");
                    while (reqVerArray.length > 4)
                    {
                        reqVerArray.pop();
                    }

                    var requiredVersionPart;
                    var actualVersionPart;
                    var index = 0;

                    do
                    {
                        requiredVersionPart = parseInt(reqVerArray[index]);
                        actualVersionPart = parseInt(actualVerArray[index]);
                        index++;
                    }
                    while (index < reqVerArray.length && requiredVersionPart === actualVersionPart);

                    if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart))
                    {
                        isVersionSupported = true;
                    }
                }
            }
            else
            {
                // Plugin object does not exist - get ready to try the IE detection approach.
                tryOlderIE = true;
            }
        }
        catch (e)
        {
            // Exception was thrown while checking for plugin object and version - get ready to try the IE detection approach.
            tryOlderIE = true;
        }

        if (tryOlderIE)
        {
            // Detect installation on IE10 and earlier IE browsers via ActiveXObject
            var control = new ActiveXObject('AgControl.AgControl');
            if (version === null)
            {
                isVersionSupported = true;
            }
            else if (control.IsVersionSupported(version))
            {
                isVersionSupported = true;
            }
            control = null;
        }
    }
    catch (e)
    {
        isVersionSupported = false;
    }

    return isVersionSupported;
};


이 예제는 웹 사이트에서 고급 Silverlight 설치 환경을 만드는 데 유용한 도우미 파일인 Silverlight.js library의 디버그 버전에서 가져온 것입니다.




//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

반응형

'WEB' 카테고리의 다른 글

브라우저별 임시 인터넷 파일 위치 경로  (0) 2017.11.23
크롬 전체화면 동작 관련  (0) 2017.09.13
ASP 한글 인코딩 캐시  (0) 2014.04.15
윈도우7용 익스플로러11(IE11)의 특징.  (2) 2013.09.25
[HTML/CSS] 태그 정리  (0) 2013.07.07