Я использую Google для создания простой интерактивной графики в HTML/JS для просмотра на iPad Safari.Графические элементы не назначены родительские элементы на Safari iPad при использовании Google Closure
В приведенном ниже примере кода показано ожидаемое поведение на Safari Mac и всех других основных браузерах (кружок показывает, что при нажатии создается сообщение консоли), но не Safari iPad. В круг не зарегистрирован обработчик событий. Вместо этого возникает ошибка.
goog.require('goog.graphics');
goog.require('goog.events.EventType');
goog.require('goog.graphics.Stroke');
goog.require('goog.graphics.SolidFill');
var showCircle = function() {
var graphics = goog.graphics.createGraphics(400, 400);
var stroke = new goog.graphics.Stroke(1, 'black');
var fill = new goog.graphics.SolidFill('#00ff00', 0.5);
var circle = graphics.drawEllipse(100, 100, 30, 30, stroke, fill);
var element = goog.dom.getElement('demo');
graphics.render(element);
console.info(circle.getElement());
goog.events.listen(circle, goog.events.EventType.MOUSEDOWN, function(e) {
console.info('mousedown');
});
};
Ошибка чтения (выброшен из base.js):
JavaScript Error on Line 804 ... TypeError: Result of expression 'obj' [null] is not an object.
Я думаю, что я проследил проблему с отсутствием элемента DOM для окружности, а также тот факт, что регистрация слушателя по кругу пытается зарегистрировать слушателя по кругу.getElement(). Когда queried, circle.getElement() возвращает значение null, объясняя ошибку. Обратите внимание, что выходное сообщение консоли выводит нуль на iPad Safari, но:
<ellipse cx="100" cy= "100" rx="30" ry="30" stroke="black" stroke-width="1" fill= "#00ff00" fill-opacity="0.5">
на Mac Safari.
Как на Mac, так и на iPad Safari, круг рисуется одинаково. Единственное отличие - ошибка. Использование «touchstart» в качестве имени события вместо goog.events.EventType.MOUSEDOWN не имеет значения.
Я хочу зарегистрировать прослушиватель событий с кругом без Ошибка, сгенерированная на iPad. Как я могу это сделать?