0

数日前から Google マップが表示されないという問題がサイトで発生しています。

動作していないページへの 2 つのリンクを次に示します。

リンク 1 - プロジェクトの詳細ページ

リンク 2 - プロジェクト カテゴリ ページ

それらはすべて同じタイプのコードで動作し、1 日前までは問題なく動作していました。

前回うまくいかなかったのは、誰かが緯度経度座標セクションに正しい数値タイプを挿入しなかったためです。

誰かが同じ問題に遭遇した場合に備えて、これを実行したコードを次に示します。以下の回答を参照してください ( Jonathan Kuhnに感謝します!)

<script type="text/javascript">
  Shadowbox.init({
    // let's skip the automatic setup because we don't have any
    // properly configured link elements on the page
    skipSetup: true
  });
  <?php
    session_start();
    if (empty($_SESSION['count'])) {
      $_SESSION['count'] = 1;
    }
    else {
      $_SESSION['count']++;
    }
  ?>
  window.onload = function() {
  // open a welcome message as soon as the window loads
  <?php
    if ($_SESSION['count'] == 1) {
  ?>
  Shadowbox.open({
    content:    '<div id="welcome-msg"><p style="padding:4px 30px; margin:4px; color:#fff;">Awesome stories, photos, news, and more on our projects, straight to your inbox.</p><p style="padding:4px 30px; margin:4px; color:#fff;">Enter your e-mail and click Submit to join.</p><form method="post" name="newsletter" action="include/newsletter_submit.php" onsubmit="return validateForm_newsletter()" style="padding:10px 30px;"><input type="text" name="email_address" class="newsletter_textbox"> <input type="submit" name="button" class="newsletter_button" value="Submit" style="margin-top:10px;"><p style="padding:18px 15px; margin:4px; color:#fff;">You can also enter your e-mail at the bottom of our homepage.</p></form></div>',
    player:     "html",
    title:      "Get our friendly updates!",
    height:     250,
    width:      350
  });
<?php } ?>
};
</script>
4

1 に答える 1

1

通常、初期化関数を実行する body onload を、空の関数を実行する window.onload で上書きしていると思います。最初のリンクのソースを表示すると、69 行目あたりに次のように表示されます。

window.onload = function() {

    // open a welcome message as soon as the window loads
};

body タグの onload を上書きしていると思います。firebugコンソールで実行するdocument.body.onload.toString()と、空の関数、コメント、およびすべてが表示されます。


編集してラッパー関数の例を追加します。

//make a temporary empty function
var tmp=function(){};
//check if there is an onload function already
if(window.onload && typeof window.onload == 'function'){
    //make tmp the onload function
    tmp=window.onload;
}
window.onload=function(){
    //call the original onload function
    tmp.apply(this, arguments);

    //do something else for shadowbox
}

基本的に、window.onload が既に存在するかどうかを確認し、存在する場合は、その関数を一時変数に保存します。次に、temp 関数を呼び出す新しい window.onload を割り当てます。私は Function.apply を使用して window.onload が受け取る引数を渡しますが、これはブラウザーによって異なる可能性がありますが、これにより、一時関数が元の関数が取得するのと同じ引数をすべて取得することが保証されます。

于 2013-01-29T20:31:02.830 に答える