- 締切済み
shadowboxについて
こんばんわ。 以前こちらでshadowbox使用の際のライブラリについて質問させて頂き、 お陰で設置する事が出来ました。ありがとうございます。 さて本題なのですが・・・。 iframeの中からshadowboxを使うと、中のフレーム内だけに画像が表示されてしまいます。 これをフレームの外に画像を表示させたいのです。(呼び出す感じですかね?) http://www.shadowbox-js.com/faq.html リンク先におそらく同じであろう質問と回答がありました。(自信はありませんが;) 翻訳して言いたい事は何となくわかるような気もするのですが、 正直javascriptに関する知識があまり無いので、自分の記述ミスが原因だと思います。 lightboxでは無理と聞いた事があるので、もしかしたら出来ないかもしれませんが・・・。 お力をお借りしたく質問いたしました。宜しくお願いします。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- yyr446
- ベストアンサー率65% (870/1330)
お礼にはおよびません。 ちょうど私も使ってみようと思っていた矢先で、 ==>(「子に表示」をクリックすると真っ白い画面が出て、「親に表示」だとエラーになります;) 確かにIE系だとうごきませんねえ。 もう一度他のFAQを見るとhtmlのDOC宣言でstrictかlooseで無いとだめと 書いてあるじゃないですか、直したら動きました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> or <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> この手のライブラリー仕様は、DOC宣言も注意する必要があるのですね。 またひとつ、おりこうになれました。
- yyr446
- ベストアンサー率65% (870/1330)
親と子のhtmlソースを表示させて、意味を良く考えてください。 shadowboxを親に出したり、子に出したりしてます。 説明がへたなので見た方が早いと思います。
お礼
回答ありがとうございます。 お手数をおかけして申し訳ありません・・・。。。 わ、わざわざページまで作って頂いて・・・!! 何てお礼を言っていいのか・・・ありがとうございます。 ただ、まことに申し訳ないのですが、ページを拝見した所、エラーが出てしまっていて自分には見る事が出来ませんでした。 (「子に表示」をクリックすると真っ白い画面が出て、「親に表示」だとエラーになります;) せっかく作って頂いたのに本当に申し訳ないです・・・。 ですが、ソースに関しては勉強させて頂きますね。本当にありがとうございます。
- fujillin
- ベストアンサー率61% (1594/2576)
No1です。 FAQの内容を理解されていないようですね。 No1のお礼を読むと、iframeでもshadowboxを読み込んでいるようですが、iframe「内」で表示するように使う必要がないのであれば(ご質問文だとそれで困っているようなので、多分無いと思いますが)、まず、iframeのHTMLでshadowboxを読込むのは、ひとまずやめておきましょう。 実際には、読込んでも問題はないのですが、今回の誤解と問題はそこにありそうなので… 例えば、両方で使用するなら、使い分けるために var Shadowbox = window.parent.Shadowbox; などとはしないでしょうし…(これだと上書きされてしまう) 一方で、親のHTMLにはshadowboxの読込みが必要です。(必須です。) その状態で、(エラーにならずに)shadowboxを機能するようにできれば、お望みの表示ができるはずです。 現状は、iframe側で読込んでいるshadowboxが動作していて、親のほうのスクリプトの呼出しに成功していない(質問者様がちゃんと呼出していないと推測されます)ので、ご質問のような状態になっていると思われます。(子側の読込みをやめておけば、親側を呼出せないとエラーになります。) 現在の処理内容を、親側のshadowboxで行えば、お望みの結果が得られるはずです。(・・・ということがFAQに書いてあります。) またNo1にも書きましたが、もしも、要素の受け渡しがある場合(機能をよく知らないので不明ですが)は、子側の要素を親側に受け渡すことになりますので(位置関係に)注意が必要です。 No2様が、実際にテストしてくださっていますので、その内容をよく読んで、意味を理解してください。
お礼
何度も回答ありがとうございます。 お手数をおかけして申し訳ありません・・・。 親にshadowboxが必須というのは確かに親から起動させるわけですからそうなりますよね。 実は、知識がないなりに色々試したんです(苦笑) 最初はこれで起動できる!と思っていたので、お礼にて書いた内容をiframeページに記述したらエラーは出なかったのですが、悩んでいる通り、親ページにしかshadowboxが表示されませんでした。(正常に起動) どうしたものかと思い、子(iframeページ)にshadowboxの記述を一切せず、親に var Shadowbox = window.parent.Shadowbox; // do whatever you want with Shadowbox here を記述したらエラーが出て普通のリンク機能(真っ白なページに画像が呼び出される状態・・・直リン?)にしかなりませんでした。 勿論、この時shadowboxの記述もしてあります。 位置関係というのは、shadowboxが表示される際の位置関係という事でしょうか・・・? 何だかこのあたりに原因があるかもです・・・調べてみますね。 Shift_JISでは"ja"ではエラーになって"en"にしたら解決したように、何か他に問題でもあるのでしょうか・・・。 明らかに自分の記述ミスがいけないと思っていただけに余計に混乱です(汗) もう一度FAQの意味を頑張って理解しようと思います!
- yyr446
- ベストアンサー率65% (870/1330)
yyr446です。 お礼の内容を見たところ、十分理解されてないですね。 shadowboxのライブラリー(JSファイル)とCSSをロードしているのは、 親ページですよね。従ってプログラムは全て親ページにあります。Shadowboxのプログラムは親ページで全部動きます。 初期化も親ページで行います。初期化で何をやっているかまでは知る必要は無いですが、初期化は必要だとマニュアルに書かれています。 iframe内のhtmlドキュメントからは、親の機能を使わせてもらう事になります。Shadowboxという名前のオブジェクトがShadowboxのいろいろな機能を持っていると思ってください。 つまり、iframe内のhtmlドキュメントのscriptで、 var Shadowbox = window.parent.Shadowbox; と書いて、親のShadowboxオブジェクトを参照可能にしているわけです。 だから、 Shadowbox.init({ var Shadowbox = window.parent.Shadowbox; // do whatever you want with Shadowbox here language:"en", players:["img"] }); </script> の書き方は思いっきり間違っています。 それから、もしやと思いますが、iframe内のhtmlドキュメントのタグでrel="shadowbox;options={xx:xx}"の記述をしても、 おそらくうまくいかないですよ。 子からshadowboxを使うときは、javascriptで親の機能をつかうようにしないとだめだと思います。
お礼
回答ありがとうございます。 えっと・・・すみません。自分の言い方が悪かったかもしれません。 もしくは、自分自身がyyr446さんの仰っている事を理解出来ていないのかもしれません。 ページのデザインで言いますと、iframeを使用して、フレーム内に呼び出されたページに画像リンクが貼ってあり、そこからshadowboxを起動させるといった具合です。 ですが、通常通りの記述ですとその呼び出されたフレーム内のページにのみ画像が展開され、ものすごく小さな表示になってしまうのです。 それを、フレーム内だけでなくページ全体に通常通りに表示させたいのです。 FAQにもあった通りiframeのページの先端に記述する・・・など書いてあったので(翻訳が曖昧で不安ですが)先程記述したような内容でやったところ、実行されませんでした。 勿論、rel="shadowbox;options={xx:xx}"はフレーム内に呼び出されるページに記述してあります。 shadowbox.JSとCSSをロードしているのは親ページとの事なので、この場合は親(フレーム内に呼び出されたページ)から子(iframeを指定してあるページ)にshadowboxを使うといった感じですかね・・・? 言ってる事全然違うかもしれません・・・すみません(汗)
- yyr446
- ベストアンサー率65% (870/1330)
shadowboxのどの機能を使われているのかわかりませんが、 親HTMLで、 <iframe name="hoge" src="./hoge.htm" height="480" width="640"></iframe> 親の<script>で Shadowbox.init({ language: "ja" }); は必要です。 iframeのHTML内の<script>で、 var Shadowbox = window.parent.Shadowbox; Shadowbox.open({ content: './fuga.img', player: "img", title: "fuga", height: 600, width: 800 }); としたら、640×480のiframe領域をはみ出して800×600の画像がちゃんと 表示されます。 質問の意味がちがいますか?
お礼
回答ありがとうございます。 申し訳ありません。 yyr446さんの書かれた通りやってみたのですが、相変わらずフレーム内だけに表示されます。 javascriptの知識があまり無いのでお聞きしたいのですが、 FAQにあった var Shadowbox = window.parent.Shadowbox; // do whatever you want with Shadowbox here の記述ではなく、何故回答して下さったような記述が必要なのでしょうか・・・? FAQにあるのは、例えばの記述の仕方って事でしょうか。 色々なやり方があるんですかねぇ。。 ちなみにですが機能は画像(img)を使います。ありがとうございます。
- fujillin
- ベストアンサー率61% (1594/2576)
shadowboxはまったく知りませんが… ご提示のFAQの通りでよいのでは? 親のHTMLにshadowboxを読み込んでおいて、iframeからは最初に var Shadowbox = window.parent.Shadowbox; としておけば、後は、通常と同じ使い方をすることで、親のほうのスクリプトが実行されるはずですけれど…? 初期設定などがある場合は、当然、それも実行しておかなければなりません。(位置関係だけは注意する必要があるかも…)
お礼
回答ありがとうございます。 そうなんですよね・・・FAQの通りに記述したんですが全くの無反応で(汗) 無反応というか、相変わらずフレーム内だけに小さく表示されてしまって・・・。 ちなみにiframeのHTMLには、 <link rel="stylesheet" type="text/css" href="***/shadowbox.css"> <script type="text/javascript" src="***/shadowbox.js"></script> <script type="text/javascript"> Shadowbox.init({ var Shadowbox = window.parent.Shadowbox; // do whatever you want with Shadowbox here language:"en", players:["img"] }); </script> このようにしました。 "ja"ではなく"en"にしてあるのは、shift_jisにしていると上手く起動しないらしいのです。実際そうでした・・・。 申し訳ありませんが初期設定とは何でしょうか・・・?すみません! 書き忘れましたが、shadowboxのバージョンは3.0bです。
お礼
回答ありがとうございます。 おお、ちゃんと起動しました! 確かにそういう事書いてありましたね~。 自分もそこ注意した記憶があります。 まぁ最初からTransitionalでやってたんで大丈夫でしたが・・・。 URL付きで標準モードにしないとダメって事なんでしょうね。 改めてソース参考にさせて頂きますね。 わざわざありがとうございました!