2

HTML5履歴APIを使用してページ情報をナビゲートおよびリロードするサイトがあります。これにより、関連するページ情報を取得するAJAX呼び出しが送信されます。私の「連絡先」ページには、グーグルマップのAPIスクリプトがあります。URLにアクセスしてページをロードすると、正常に機能します。GoogleはmapsAPIを読み込み、bodyタグを閉じる前にそれを含めます。

ページから移動して(履歴APIを使用してコンテンツを削除および追加)、連絡先ページに戻ると(再び履歴APIを介して)、(すでに含まれている)マップAPIが2回呼び出され、2倍になります。 。これにより、コンソールに警告メッセージが表示されます。

新しいコンテンツが読み込まれる前に、bodyを閉じるタグの前に追加されたGoogle Mapsスクリプトを削除しようとしましたが、スクリプトが解析されたため、マップに関連するすべての関数がブラウザのメモリに残ります。

だから私の質問は、「ページコンテンツのAJAXリクエストを行うときにすべてのグーグルマップJSをアンロードする方法はありますか?」ということだと思います。

コンソールメッセージは次のとおりです。

警告:このページにGoogleMapsAPIを複数回含めています。これにより、予期しないエラーが発生する可能性があります。

4

1 に答える 1

1

また、このエラーが発生します。Googleマップを使用するページがあり、ajaxを使用してページの一部にGoogleマップコードを再読み込みすると、エラーが表示されます。

私のHTMLは複製されていませんが、htmlブロックはグーグルマップのHTMLを持つ同じデータで上書きされ、1つではなく2つのブロックであるかのように扱われることに注意してください。htmlブロックを挿入する前にjquery.empty()を使用しようとしましたが、変更はなく、複数のエラーが発生しました。ページはロード時にエラーをスローしないので、私の唯一の結論はこれです。

編集:私がそれについて考えるとき、理由は私のHTMLブロックにスクリプトインクルード行が含まれていることだと思います。これがHTMLで1回だけであっても、この行の全体のポイントはDOMに大量のコードをロードしているので簡単に言えば...ソリューションはスクリプトを1回だけロードします-グーグルが言うように!ドー!これらの<scriptsrc="行が基本的にDOMに対して何をするかを考える必要があります:)したがって、マップapiがロードされているかどうかをチェックするJSブロックを追加し、ロードされていない場合にのみロードします。include()とinclude_once()のPHPの違いを考えてください。

于 2017-04-10T16:34:37.563 に答える