2013-02-21 4 views
1

Я пытаюсь создать строку, содержащую значения свойств объекта контекста canvas. Код, я использую работает во всех браузерах, на которых я проверил, для IE 10. кроме Вот код:Запрос свойств объекта работает во всех браузерах, кроме 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 действительно имеет ожидаемые (нефункциональные) свойства при вводе цикла. Что происходит?

ответ

1

Проблема с кодом заключается в том, что ctx.hasOwnProperty(prop) возвращает false в IE10 для полей, которые являются технически на самом объекте 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])); 
Смежные вопросы