我正在尝试构建一个包含画布上下文对象的属性值的字符串。我正在使用的代码适用于我测试过的所有浏览器,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
循环时确实具有预期(非功能)属性。发生了什么事?
答案 0 :(得分:1)
代码的问题是ctx.hasOwnProperty(prop)
在IE10中返回false
,用于技术上在canvas对象本身而不是其原型的字段;(这对我来说似乎是个错误。我'我不确定它是否仅适用于画布,或者是否也适用于其他元素。
我已更新您的代码,现在在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] ) );