0

私のサイト http://www.therussianfrostfarmers.com/ でlightbox2を動作させようとしていますが、外部jsファイルの競合に問題があるようです。このコードのどこに問題があるのか​​完全にはわかりませんが、onloadイベントの呼び出し方法に関係があると思います。ホームページのブログコンテンツがiframeに読み込まれると、onloadイベントを使用してコンテンツに合わせてiframeのサイズが動的に変更されますが、lightbox2に必要なファイルをインポートすると(通常どおり)...

<script type="text/javascript" src="js/prototype.js"></script>
<script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="js/lightbox.js"></script>

.... iframeで呼び出されているupdateSize()をキャンセルします。lightbox2は引き続き機能します。

問題のあるjsファイルをprototype.jsに絞り込みました。

関数dhtmlLoadScript()を使用して一連のイベントを処理してみました。次のコードを使用すると、ページが正しく読み込まれ、iframeのサイズが正しく変更されますが、ページが白くなり、Firefoxの読み込みアイコンが回転し続けます。

<script type='text/javascript'>
// function to resize iframe
function updateSize() 
{ 
    // get width
    frame_x = $('#content').width() -5; 

    // apply width 
    $('#iframed').css('width', frame_x); 


    //get height
    var the_height = document.getElementById('iframed').contentWindow.document.body.scrollHeight +120;

    //apply height
    document.getElementById('iframed').height = the_height;

}

// function to load external js files 
function dhtmlLoadScript(url)
{
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e);
}

// function to handle each event on onload callback 
function callbackHandler()
{
   updateSize();
   dhtmlLoadScript("http://www.therussianfrostfarmers.com/ndxz-studio/site/js/prototype.js");
   dhtmlLoadScript("http://www.therussianfrostfarmers.com/ndxz-studio/site/js/scriptaculous.js?load=effects,builder");
   dhtmlLoadScript("http://www.therussianfrostfarmers.com/ndxz-studio/site/js/lightbox.js"); 
} 

</script>

<iframe src='$url' frameborder='0' id='iframed' onload="callbackHandler()"></iframe>

不明な点がある場合は申し訳ありません。

ありがとうカム

4

1 に答える 1

0

簡単に確認できます。関数名updateSize()がプロトタイプで再マップされていないかどうかを確認してください

于 2009-06-10T07:36:00.260 に答える