私のサイト 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>
不明な点がある場合は申し訳ありません。
ありがとうカム