programing

IE9 JavaScript 오류: SCRIPT5007: 'ui' 속성의 값을 가져올 수 없음: 개체가 null이거나 정의되지 않았습니다.

skycolor 2023. 8. 10. 18:41
반응형

IE9 JavaScript 오류: SCRIPT5007: 'ui' 속성의 값을 가져올 수 없음: 개체가 null이거나 정의되지 않았습니다.

내 웹 사이트는 크롬, 파이어폭스 및 인터넷 익스플로러 8에서 잘 작동합니다.그러나 Internet Explorer 9에서는 구성 요소 위에 마우스를 올려 놓으면 매우 이상한 오류가 발생합니다.

SCRIPT5007: 'ui' 속성의 값을 가져올 수 없습니다. 개체가 null이거나 정의되지 않은 ScriptResource.axd?d=sTHNYcjtEdStW2Igk0K4NaRiBDytPljgMCYPqxV5입니다.NEZ1IETx3DRHufMFTEMoh2L3771sigGlR2bqlOxaiwXVEVEPerLDL0hHHUFDTOM0o55K0&t=ffffffd37cb3a1, 라인 181 문자 1914

그리고 자바스크립트의 오류에 대한 링크를 따라가면 다음과 같은 코드 조각들을 보여줍니다.

onNodeOver:function(B,A){A.ui.onOver(B)},onNodeOut:function(B,A){A.ui.onOut(B)}

저는 이 오류를 어떻게 해결해야 할지 잘 모르겠습니다.저는 이 해결책을 보았지만 그것이 저에게 문제를 해결해 주지는 못했습니다.

아이디어가 있습니까?

많은 JavaScript 라이브러리(특히 최근이 아닌 라이브러리)는 IE9가 많은 작업을 처리할 때 IE8과 충돌하기 때문에 IE9를 잘 처리하지 못합니다.

IE를 위해 냄새를 맡는 JS 코드는 IE9에서 매우 자주 실패할 것입니다. 이러한 코드가 IE9를 특별히 처리하도록 다시 작성되지 않는 한 말입니다.

JS 코드를 업데이트하기 전에 "X-UA-Compatible" 메타 태그를 사용하여 웹 페이지를 IE8 모드로 강제로 전환해야 합니다.

편집: 3년이 지난 지금도 IE11에 올라왔는데 아직도 많은 JS 라이브러리가 IE9을 기본적으로 지원해야 하고 대부분이 IE10을 지원해야 하므로 JS 라이브러리를 업그레이드할 의도가 없는 한 요즘 메타 태그가 필요하지 않을 것입니다.그러나 IE10은 도메인 간 스크립팅 및 일부 CDN 기반 라이브러리 코드 위반과 관련하여 변경 사항을 변경합니다.라이브러리 버전을 확인합니다.예를 들어 CDN의 Dojo 1.9는 IE10에서 깨지지만 1.9.1이 해결합니다.

편집 2: 이제 정말로 여러분의 행동을 정리할 필요가 있습니다.우리는 지금 2014년 중반에 있습니다!!!저는 여전히 이것에 대한 찬성표를 얻고 있습니다!사이트를 수정하여 오래된 IE 하드코드 종속성을 제거하십시오!

이것이 내가 가장 인기 있는 대답이 될 줄 알았다면 아마 더 많은 시간을 들여 그것을 다듬었을 것입니다.

EDIT 3: 이제 거의 2016년입니다.지지율은 여전히 상승하고 있습니다...레거시 코드가 많이 있는 것 같아요언젠가 우리의 프로그램이 우리보다 오래 살 것입니다.

저는 IE9에서 같은 문제를 겪고 있었습니다.저는 위의 답변에 따라 다음과 같은 행을 추가했습니다.

<meta http-equiv="X-UA-Compatible" content="IE=8;FF=3;OtherUA=4" />

내 안에서<head>그리고 그것은 성공하였다.

저는 IE4 이상의 냄새를 맡는 코드를 작성했으며 현재 제 개인 사이트뿐만 아니라 제 회사의 고객 사이트에서도 완벽하게 작동하고 있습니다.

다음 열거된 상수 및 함수 변수를 페이지의 javascript include 파일에 포함합니다...

//methods
var BrowserTypes = {
    Unknown: 0,
    FireFox: 1,
    Chrome: 2,
    Safari: 3,
    IE: 4,
    IE7: 5,
    IE8: 6,
    IE9: 7,
    IE10: 8,
    IE11: 8,
    IE12: 8
};

var Browser = function () {
    try {
        //declares
        var type;
        var version;
        var sVersion;

        //process
        switch (navigator.appName.toLowerCase()) {
            case "microsoft internet explorer":
                type = BrowserTypes.IE;
                sVersion = navigator.appVersion.substring(navigator.appVersion.indexOf('MSIE') + 5, navigator.appVersion.length);
                version = parseFloat(sVersion.split(";")[0]);
                switch (parseInt(version)) {
                    case 7:
                        type = BrowserTypes.IE7;
                        break;
                    case 8:
                        type = BrowserTypes.IE8;
                        break;
                    case 9:
                        type = BrowserTypes.IE9;
                        break;
                    case 10:
                        type = BrowserTypes.IE10;
                        break;
                    case 11:
                        type = BrowserTypes.IE11;
                        break;
                    case 12:
                        type = BrowserTypes.IE12;
                        break;
                }
                break;
            case "netscape":
                if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { type = BrowserTypes.Chrome; }
                else { if (navigator.userAgent.toLowerCase().indexOf("firefox") > -1) { type = BrowserTypes.FireFox } };
                break;
            default:
                type = BrowserTypes.Unknown;
                break;
        }

        //returns
        return type;
    } catch (ex) {
    }
};

그러면 다음과 같은 조건부 기능을 사용하기만 하면 됩니다.

예를value = (Browser() >= BrowserTypes.IE) ? node.text : node.textContent;

또는WindowWidth = (((Browser() >= BrowserTypes.IE9) || (Browser() < BrowserTypes.IE)) ? window.innerWidth : document.documentElement.clientWidth);

또는sJSON = (Browser() >= BrowserTypes.IE) ? xmlElement.text : xmlElement.textContent;

알겠어요?이게 도움이 되길 바랍니다.

아, IE10이 출시된 후 브라우저() 기능을 QA하여 규칙을 변경하지 않았는지 확인하는 것을 염두에 두는 것이 좋습니다.

이것은 IE 11에서 저에게 효과가 있었습니다.

<meta http-equiv="x-ua-compatible" content="IE=edge; charset=UTF-8">

끝에 쉼표가 있는지 확인합니다.

                            },
                            {
                                name: 'МОФ. Перелив из баков. м3/ч',
                                data: graph_high3,
                                dataGrouping: {
                                    units: groupingUnits,
                                    groupPixelWidth: 40,
                                    approximation: "average",
                                    enabled: true,
                                    units: [[
                                            'minute',
                                            [1]
                                        ]]
                                }
                            }   // if , - SCRIPT5007

것을 에도 이 할 수 있습니다.file://http://)..

이에 대한 몇 가지 논의가 있습니다. https://github.com/jeromegn/Backbone.localStorage/issues/55

자바스크립트 코드를 함수에 추가한 다음 문서 본문이 로드된 후 함수를 호출하는 것도 시도해야 합니다.그것은 나에게 효과가 있었습니다 :)

저 또한 같은 문제에 직면하고 있었습니다.

web.config 파일에 인증 구성을 쓰지 않고 .aspx 페이지에서 아래 코드를 사용하고 있었습니다.Web.config에서 설정을 작성한 후 코드를 실행할 수 있습니다.

<% If Request.IsAuthenticated Then%>
     <table></table>
<%end if%> 

언급URL : https://stackoverflow.com/questions/5787245/ie9-javascript-error-script5007-unable-to-get-value-of-the-property-ui-obje

반응형