2016-03-28 9 views
0

私のopenSeadragonプロジェクトにはAnnotoriousが追加されています。 http://annotorious.github.io/demos/openseadragon-preview.html このプラグインを起動するには、次のオプションがあります。ここでHTMLの "onload()"がjavascriptの読み込みの遅れと競合しますか?

<script> 
 
    function init() { 
 
    anno.makeAnnotatable(document.getElementById('myImage')); 
 
    } 
 
</script> 
 
... 
 
<body onload="init();"> 
 
    <img src="example.jpg" id="myImage" /> 
 
</body>

私は、ビューアのブロックでJavaScriptの読み込みを遅らせるためにこれらを使用し、問題となっています。

<script type="text/javascript"> 
 
if (window.addEventListener) 
 
     window.addEventListener("load", downloadJSAtOnload, false); 
 
    else if (window.attachEvent) 
 
     window.attachEvent("onload", downloadJSAtOnload); 
 
    else window.onload = downloadJSAtOnload; 
 
</script>
iが= "INIT();" のonload追加するとビューアは機能しません。

これら2つの間に競合がありますか?もしそうなら、それを解決する方法は?

+0

あなたはinit関数内でanno.makeAnnotatableを使用しています..それに関連する関連ライブラリはそれ以前のページに含まれていますか? –

+0

はい、それです@ techie_28 –

+0

ブラウザのコンソールを開き、ページをリロードしてJSエラーがないかどうかを確認します。 –

答えて

0

私はこれが役立つはずだと思う:

<script type="text/javascript"> 
var htmlOnLoad = window.onload; 
window.onload = function(e){htmlOnLoad(e); downloadJSAtOnload(e)}; 
</script> 

アイデアはHTMLを結合させたハンドラを維持し、両方を呼び出すことです:HTML-とjs-ハンドラを。

+0

それは役に立たないでしょう。これは、ダウンロードが完了していないだけでなく、ダウンロードを開始していないスクリプトによって作成されたオブジェクトを使用しようとします。それは例外をスローするので、 'downloadJSAtOnload'は実行されません。 – Quentin

+0

ダウンロードが完了していないスクリプトはありますか?ここでの唯一の仮定は、関数downloadJSAtOnloadが定義されていることです。 – ptrk

+0

- 'downloadJSAtOnload'がダウンロードを引き起こし、' htmlOnLoad'がそれに依存するもの。 – Quentin

0

ロード時の挙動はそうのようなものです: (おそらくブラウザの種類によって異なります - 動作が変更される可能性があります - 私はクロームで働いていた)あなたはボディのonloadを設定した場合

  1. =「_ FNは」それはページがロード上で動作します
  2. ページスクリプト(bodyタグの前)の上にwindow.onload = _fnを追加すると、両方ともロードされます(2と1)
  3. HTMLの最も下の領域にwindow.onloadを追加する場合。これは、ページの読み込み時に実行される唯一のものです。 (ボディ "onload"はオーバーライドされます)
  4. ウィンドウにイベントリスナーを追加する - あなたが必要なだけ追加することができ、それらはすべてそれぞれ順序付けされてロードされます。
0

loadイベントが、あなたは二つのことをやろうとしている発火:(順番に、anno.makeAnnotatableを呼び出して、)

  • コールinit
  • 非同期
anno.makeAnnotatableが利用できるようになりますどのJavaScriptを読み込みます

関数が存在する前に呼び出すことはできません。 downloadJSAtOnloadトリガーが終了したJSがロードされるまで、initの呼び出しを延期する必要があります。 (その詳細はdownloadJSAtOnloadの仕組みに依存します)。

+0

私はbodyの一番下にdownloadJSAtOnloadを置き、この方法でinitを呼び出します:。あなたはそれが間違った順序だと言っているのですか? –

+0

@ ho.yq - 正確ではありません。私はdownloadJSAtOnloadが非同期であると言っています。 – Quentin

+0

@ ho.yq - それをどのように解決するかは、 'downloadJSAtOnload'の仕組みによって異なります。 – Quentin

関連する問題