2012-03-20 17 views
8

Wyświetlam wykresy Google na niektórych stronach internetowych. Ale nie mogę zapewnić, że moi klienci będą mieli dostęp do sieci w Google: komputer kliencki będzie w tej samej sieci LAN, co mój serwer sieciowy (który może uzyskać dostęp do Google), ale nie gwarantuję, że wszyscy klienci będą mieli dostęp poza siecią LAN .Skąd wiadomo, czy Google Visualization jest wczytywany?

Chciałbym wyświetlać dane za pomocą wykresów Google dla tych klientów, którzy mają do nich dostęp, oraz zwykłej tabeli HTML dla tych, którzy jej nie mają.

Próbowałem ustawienie zmiennej false, a zmieniając go na true w metodzie zwanej gdy Visualization API Google jest załadowany:

var canAccessGoogleVisualizationVar = false; 
google.load('visualization', '1', {packages: ['corechart'], callback: canAccessGoogleVisualization}); 
function canAccessGoogleVisualization() 
{ 
    canAccessGoogleVisualizationVar = true; 
} 

Ale to nie wydają się działać.

Skąd mogę wiedzieć od strony klienta, czy wizualizacja Google jest dostępna, czy nie?


Aktualizacja: Powyższy kod nie działa z powodu następującego kodu (co nie zakładać przed, jak myślałem, nie było sensu):

google.setOnLoadCallback(drawVisualization); 

function drawVisualization() 
{ 
    // Check if Google Visualization is loaded 
    if (!canAccessGoogleVisualizationVar) { 
     alert('Can't access Google Visualization'); 
    } 

    // The following code can be any of the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart). 
    var data = new google.visualization.DataTable(); 
    // Add columns and values to data 
    ... 
    // Call new google.visualization.AnyChartBuilderFromTheAPI(<element>).draw(data); 
} 

zauważyłem mój kod nie zrobił Działa, ponieważ, jeśli canAccessGoogleVisualizationVar == true, gałąź if nie zostanie pobrana, a jeśli jej false, function drawVisualization() nie zostanie wykonana.

Wziąłem więc jeśli test poza funkcją:

google.setOnLoadCallback(drawVisualization); 

function drawVisualization() 
{ 
    // Any drawVisualization unchanged from the samples from Google (see http://code.google.com/apis/ajax/playground/?type=visualization#pie_chart). 
} 

// Check if Google Visualization is loaded at the end of this <script> </script> 
if (!canAccessGoogleVisualizationVar) { 
    alert('Can't access Google Visualization'); 
} 
</script> 

Ale teraz to nie działa, ponieważ ocena if (!canAccessGoogleVisualizationVar) jest wykonywany przed linię google.load(?, ?, canAccessGoogleVisualization); wywołuje metodę canAccessGoogleVisualization().

Jak mogę być pewien Czytam wartość canAccessGoogleVisualizationVarpo próbowałem wykonać połączenie do google.load(...);?

+0

Aktualizacja pytanie o więcej informacji. –

+0

To, co jest warte, jest możliwe, aby pobrać gviz js i css i po prostu wyświetlać go z dowolnego miejsca w tej wewnętrznej aplikacji. Wiele wykresów jest wykonywanych po stronie klienta, a zatem będzie działać dobrze w ten sposób (zrobiłem to). Wystarczy spojrzeć na wywołania sieciowe wychodzące, gdy ładujesz api jak zwykle i możesz zobaczyć potrzebne pliki. Warto zauważyć, że a) kod zostanie zminifikowany i b) nie dostaniesz żadnych aktualizacji kodu bez ręcznej zmiany go, ale może to być opcja :) – oli

+0

Dzięki @peter, spróbuję. Fakt, że kod nie został zaktualizowany, jeśli nie zmieniam go ręcznie, jest dodatkowym (w tym przypadku). –

Odpowiedz

8

Można spróbować

function canAccessGoogleVisualization() 
{ 
    if ((typeof google === 'undefined') || (typeof google.visualization === 'undefined')) { 
     return false; 
    } 
    else{ 
    return true; 
    } 
} 
+1

To powinna być zaakceptowana odpowiedź. – C0ZEN

Powiązane problemy