WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:インラインフレーム内のfunctionの呼び出し方

0:[投稿] 落合 [MAIL] [2004/03/25 13:13 ][環境:winXP わからない]

インラインフレームの内容を、visible,hidenを使って操作しよう
としたのですが、うまくいかず悩んでおります。
方法としては、インラインフレーム内に表示するページのheadに
functionを造り表示を切り替えるJavaスクリプトをを記述し、イ
ンラインフレームのidとnameに同じ名前をつけました。
そして、「インラインフレーム名.function名」にて親のページか
ら呼び出すしました。
結果は、親のページとインラインフレームが同じサーバーにある
場合は動作しましたが、親のページとインラインフレームが別の
サーバーにあった場合にはエラーも出ず動作しませんでした。
また、idとnameに同じ名前をつけた訳は、親ページとインライン
フレームを同じサーバーに置いて試していたときに、IEではidで
反応してくれましたが、NSではnameを付けないと反応してくれな
かったためです。

親ページとインラインフレームのサーバーが違う場合もインライ
ンフレーム内のfunctionを動作させる方法はあるのでしょうか。
知っている方が見えたらよろしくお願いいたします。


1:[回答] Yachimata [2004/03/25 18:30 ]

異なるドメインの間での参照はセキュリティの関係上、無条件で制限が掛かります。


2:[完了] 落合 [2004/03/25 18:47 ]

回答ありがとうございます。
とりあえず、インラインフレームの内容と同じサーバーにボタンだけのページを作り、もう一つボタンだけのインラインフレーム
を配置して対応してみました。
動作的には、申し分ないのですが、見た目が悪いので、デザイン
の改善策の方を考えてみようと思います。


3:[お知らせ] 落合 [2004/03/25 21:16 ]

上の解決策以外で、思いつきで試して一応成功したのでご報告いたします。
方法は、変更したいインラインフレームと同じサーバーにonResizeで反応するスクリプトを作成しておき、インラインフレームにてサイズ1,0で配置しておき、親のページのスクリプトからonMouseDownでサイズを1,1にして、onMouseUpで1,0に戻すと他のサーバーのスクリプトを動作させることができました。
元のサイズを0,0にしていないのは、なぜかIEではうまく動作しなかったためです。おそらくIEでは0,0サイズのインラインフレームは存在しないものと認識されるせいではないかと思います。

問題点1
おそらく、マウスダウン時とマウスアップ時の2回スクリプトが実行されている。
問題点2
NSでは、0,0のフレームでも点のようなフレームが表示される。(それでも、2で書いた方法よりは見た目は十分いい)
問題点3
反則技ですか?


4:[回答] みかん [2004/03/25 23:07 ]

他ドメインのスクリプトを実行できたのですか??

是非教えて下さい。

というかセキュリティ漏れじゃないんですか??
MSに報告すべき問題かも??


5:[回答] 落合 [URL] [2004/03/26 20:23 ]

いろいろ試した結論としては、以下の事項です。

他のドメインのフレーム
プロパティの参照も、書き換えもできない。
functionも実行できない。

同じドメインのフレーム同士
プロパティの参照、書き換えは可能。
別のフレームのfunctionは実行できない。(呼び出し方が間違っていた?)

一応、私の持っているIE6とNS7での動作確認はできたので、URLを乗せておきます。
このページの一番下のリンクのジャンル入れ替えに使用しています。

発言4での問題点の対応
問題1はプロパティの参照ができたのでif文で対応できる。
問題2はスクリプトを記入したフレームをCSSでhiddenにすることで、ほぼ見た目に干渉はしない。
(やはりdisplay:noneでは、反応しなくなりました)

http://www13.plala.or.jp/keisama/
このページでは、わざとhiddenにしないでNSでは見えるようにしてます。

動作としては、操作したいドメインと同じドメインにリサイズされると実行されるスクリプトを書いておき、親のページでサイズ変更をしているだけです。
スクリプトの中身は以下のものです。
それぞれの、フレームごとにvisibleにするものが違っているだけです。

function ifgnhyouzi(){
    if(parent.dondonframe.document.getElementById('gn1').style.visibility != "visible"){
        parent.dondonframe.document.getElementById('gn1').style.visibility="visible";
        parent.dondonframe.document.getElementById('gn2').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn3').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn4').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn5').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn6').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn7').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn8').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn9').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn10').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn11').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn12').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn13').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn14').style.visibility="hidden";
        parent.dondonframe.document.getElementById('gn15').style.visibility="hidden";
    }
}

window.onresize = ifgnhyouzi;

ジャンルを増やしても対応できるようにしてるので、存在しないIDでエラー終了しているみたいですが、問題なさそうなのでとりあえずそのままにしてます。

新たな疑問・・・
ifgnhyouziの呼び出しにifgnhyouzi('gn1')のように引数を与えると、なぜかページを開いたときに1回実行されてしまいます。
その後は、フレームのサイズを変更しても、反応しませんでした。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World