web-dev-qa-db-ja.com

IE9 JavaScriptエラー:SCRIPT5007:プロパティ 'ui'の値を取得できません:オブジェクトがnullまたは未定義です

私のウェブサイトは、Chrome、Firefox、およびInternet Explorer 8で正常に動作します。しかし、Internet Explorer 9では、コンポーネントにカーソルを合わせると、非常に奇妙なエラーが発生します。

SCRIPT5007:プロパティ 'UI' の値を取得することができません:?オブジェクトは、D = sTHNYcjtEdStW2Igkk0K4NaRiBDytPljgMCYpqxV5NEZ1IEtx3DRHufMFtEMwoh2L3771sigGlR2bqlOxaiwXVEvePerLDCL0hFHHUFdTOM0o55K0&トン= ffffffffd37cb3a1、ライン181文字1914 nullであるか、ScriptResource.axdを未定義

また、javascriptのエラーへのリンクをたどると、次のコードが表示されます。

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

このエラーを解決する方法については、私は少し無知です。 this ソリューションを見ましたが、それは私にとって問題を解決しませんでした。

何か案は?

42
Soroush Hakami

多くのJavaScriptライブラリ(特に最近ではないライブラリ)は、IE9をうまく処理しません。これは、IE8が多くのことを処理する際にIE8で機能しなくなるためです。

IEをスニッフィングするJSコードは、IE9を特別に処理するように書き直されない限り、IE9ではかなり頻繁に失敗します。

JSコードを更新する前に、「X-UA-Compatible」メタタグを使用して、WebページをIE8モードに強制する必要があります。

編集:信じられない、3年後、私たちはIE11に取り組んでおり、まだこれに対する賛成票があります。 :-)多くのJSライブラリは少なくともIE9をネイティブにサポートし、ほとんどはIE10をサポートするはずです。そのため、JSライブラリをアップグレードするつもりがない限り、最近ではメタタグが必要になることはほとんどありません。ただし、IE10はクロスドメインスクリプティングとCDNベースのライブラリコードの一部の破損に関する変更を行うことに注意してください。ライブラリのバージョンを確認してください。たとえば、CDNのDojo 1.9はIE10で機能しなくなりますが、1.9.1では解決します。

編集2:やあ、みんな、[〜#〜] really [〜#〜]一緒に行動する必要がある今。私たちは今、2014年半ばにいます!!!私は[〜#〜] still [〜#〜]これに賛成票を投じています!サイトを修正して、古いIEのハードコーディングされた依存関係を取り除きます!

ため息...これが私の最も人気のある答えであることを知っていたら、おそらくもっと時間をかけて磨いたでしょう...

編集3:ほぼ2016年です。まだ投票数が増えています...レガシーコードがlotsあると思いますそこに...ある日、私たちのプログラムは私たちを生き延びます...

146
Stephen Chung

IE9でも同じ問題が発生していました。上記の答えに従い、次の行を追加しました。

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

私の<head>そしてそれは働いた。

12
savan

私はIE4以上をスニッフィングするコードを記述し、現在は自分の個人サイトだけでなく、会社のクライアントのサイトでも完全に機能しています。

次の列挙定数と関数変数をページのjavascriptインクルードファイルに含めます...

_//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がリリースされた後、Browser()関数のQAを念頭に置いて、ルールを変更していないことを確認したいかもしれません。

5
Justin Russo

これはIE 11:

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

最後にコンマがあるかどうかを確認してください。

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

ページへのアクセスをローカルで表示している場合(file:// の代わりに http://)..

これに関するいくつかの議論がここにあります: https://github.com/jeromegn/Backbone.localStorage/issues/55

0
Rosdi Kasim