1

キャンバスコンテキストオブジェクトのプロパティ値を含む文字列を作成しようとしています。私が使用しているコードは、IE 10を除いて、テストしたすべてのブラウザーで機能します。コードは次のとおりです。

getCanvasInfo : function (canvas) {
    var props = [],
        prop,
        ctx = canvas.getContext('2d');
    for (prop in ctx) {
        if (ctx.hasOwnProperty(prop) &&
            prop !== "canvas" &&
            typeof ctx[prop] !== "function")
        {
            props.push(prop);
        }
    }
    return props.sort().map(function (p) {
        return p + ": " + ctx[p];
    }).join("\n");
}

IE 10(モバイルとデスクトップの両方)では、ifテストですべてのプロパティが除外されているようでprops、ループが終了すると空の配列が残ります。ループに入っctxたときに期待される(機能しない)プロパティが実際にあるデバッガーで確認しました。for..inどうしたの?

4

1 に答える 1

1

コードの問題は、IE10で、技術的にはキャンバスオブジェクト自体にあり、プロトタイプではないフィールドctx.hasOwnProperty(prop)が返さfalseれることです;(これは私にはバグのようです。キャンバス専用かどうかはわかりません。他の要素にも存在します。

コードを更新しましたが、IE10とChromeで同様の結果が返されるようになりました。次のjsFiddleを参照してくださいhttp://jsfiddle.net/T2yzm/1/

var getCanvasInfo = function (canvas) {
    var props = [],
        prop,
        ctx = canvas.getContext('2d');
    for (prop in ctx) {
        if ( prop !== "canvas" && typeof ctx[prop] !== "function") {
            props.push(prop);
        }
    }
    return props.sort().map(function (p) {
        return p + ": " + ctx[p];
    }).join("\n");
};

console.log( getCanvasInfo( $("canvas")[0] ) );
于 2013-03-07T04:11:25.190 に答える