2013-11-18 3 views
0

В моем приложении я использую диаграммы Google.
Проблема в том, что браузер Android 2.3.x не поддерживает svg.
я получил следующую ошибку: cannot set property 'overflow' of null
Android 2.3.x с диаграммами Google

После некоторых исследований я нашел эту question со ссылкой на canvg

мой код:

<div id="Wrapper">  
     <div id="titlewrapper"><div id="title" class="rounded-corners">qwertyuiopasdfghjklzxcvbnm</div></div> 
     <div id="chart_div" style="position: relative;"> 
      <div dir="ltr" style="position: relative; width: 1584px; height: 531px;"> 
       <div style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%;"> 
        <svg width="1584" height="531" style="overflow: hidden;"> 
         // SVG CONTENT 
        </svg> 
       </div> 
      </div> 
     </div> 
    </div> 

код карты Google добавляется в #chart_div.
Мой вопрос в том, как я могу использовать canvg или любой другой инструмент для поддержки диаграммы в браузерах Android 2.3.x?

- Edit: Я думаю, что использовать:

//load '../path/to/your.svg' in the canvas with id = 'canvas' 
    canvg('canvas', '../path/to/your.svg') 

Как получить ссылку на эту SVG?

+0

Не отображает ли Google графики выход в PNG? – Zerkz

+0

В моем случае мне нужна интерактивная диаграмма, поэтому PNG не подходит для меня. – NickF

ответ

1

Для динамических данных почти невозможно увидеть ответ @asgallant.
Карты Google используют SVG и Android 2.3.x браузер не поддерживает это.
Я нашел хорошие альтернативы на холсте Flotr2 и Chart.js

+1

Возможно, на Android 2.x есть CanVg [http://code.google.com/p/canvg/], как показано в Highcharts [http://www.highcharts.com/products/highcharts] , Вы не можете ожидать жидкостного обновления, хотя, возможно, 1-2 кадра/с на устройстве. Flotr2, Chart.js или Flot [http://www.flotcharts.org/] могут предоставить альтернативы для многих потребностей визуализации с гораздо меньшими накладными расходами. – Philzen

1

Если библиотека canvg вы используете тот же один я имею в виду, я полагаю, вы можете передать ссылку на <svg> элемент в вашем DOM к canvg функции:

var svg = document.querySelector('#chart_div svg'); 
canvg('canvas', svg); 

Вы, вероятно, хотите положить, что в «готовом» обработчик событий для любой диаграммы вы рисуете:

google.visualization.events.addListener(chart, 'ready', function() { 
    var svg = document.querySelector('#chart_div svg'); 
    canvg('canvas', svg); 
}); 

Это будет работать только, однако, если SVG фактически получает записывается в DOM. Я не знаю, сможет ли браузер Android 2.3.x фактически разрешить запись недействительного элемента svg в DOM.

+0

Я пробовал это, но в Android 2.3.x событие «ready» не вызвало, только событие «error» и, похоже, в DOM нет SVG. – NickF

+1

Если API визуализации не удается записать SVG в DOM, вы не можете использовать функцию canvg для преобразования ее в элемент холста. Если в вашей диаграмме нет динамического источника данных, вы можете открыть диаграмму в другом браузере (Chrome) и скопировать SVG в файл. Если вы поместите этот файл на свой сервер, вы можете заставить функцию canvg вытащить данные SVG из файла, а не пытаться получить его непосредственно из API визуализации. – asgallant

+0

Вы правы Я нашел альтернативу «Flotr2». В любом случае, спасибо – NickF

Смежные вопросы