7

Web サイトでグラフを描画するために Google API を使用したいと考えています。ただし、google.setOnLoadCallback機能に問題があります。これが私のコードです(簡略化):

試行 1: (正常に動作します)

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/styling.js"></script>
<script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1.0', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(helloWorld);

    function helloWorld() {
        alert("Hello World");
    }

</script>

試行 2: (正常に動作します)

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript" src="js/styling.js"></script>
<script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1.0', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(helloWorld);

</script>

そして、style.js に次のように記述します。

function helloWorld() {
    alert("Hello World");
}

この場合、すべてが正常に機能します。

しかし...試行3(失敗!)

<script type="text/javascript" src="js/styling.js"></script>

そして、style.js で次のように記述します。

 window.onload = function() {
    // Load the Visualization API and the piechart package.
    google.load('visualization', '1.0', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(helloWorld);
}   

function helloWorld() {
    alert("Hello World");
}

これは機能しません。helloWorld()はまったく呼び出されていないようです。

なんで?

4

1 に答える 1

1

setOnLoadCallbackページ読み込みイベントがすでにトリガーされているときにコールバックを定義しているため、イベントはまったくトリガーされないと思います。

ページが読み込まれたコールバック コンテキストを維持google.setOnLoadCallback(helloWorld);し、 function helloWorld() {...}外部に置くだけです (両方とも、そうしないとコンテキストの問題が発生します)。

于 2013-12-01T21:29:34.547 に答える