特殊なケースでフレーム解除させるには?

[上に] [前に] [次に]
むらし 2000/05/22(月) 18:59:50
イントラで、2分割フレームの片方に他サイトのページを入れて
いますが、その他サイトページのフレーム内のリンクをクリック
した時にフレームを解除させたいと考えています。

具体的には、
<FRAMESET ROWS="70%,*" onLoad="setTarget()">
<FRAME SRC="http://hoge.co.jp/hoge/hoge1.html" NAME="frame1">  *1
<FRAME SRC="hoge2.html" NAME="frame2">  *2
</FRAMESET>
の様になっていて、*2 の方は自サイトなので <BASE TARGET="_top">
を入れてあますが、*1 の方は他サイトなので、TARGET="_top" を
加えるなどの加工ができません。

そこで、下の様な JavaScript で target="_top" を入れちゃおう、
としたのですが、2行目の
     linkNo = frmObj.document.links.length;
で「アクセスが拒否されました。」エラーが出てしまいます。

1行目を frmObj = self.frame2; とする(無意味)とエラーに
ならないので、スクリプトのロジックは問題ないと思うのですが。

このエラーを防ぐ方法、または最初に書いた目的を達成する方法を、
どなたかご教授頂けませんか?

function setTarget(){
  frmObj = self.frame1;
  linkNo = frmObj.document.links.length;
  for(i = 0; i < linkNo; i++){
    link = new String(frmObj.document.links[i]);
    if(link.indexOf("http://") >= 0 ){
      alert(link);                             // for DEBUG
      frmObj.document.links[i].target = "_top";
    }
  }
}

dddd 2000/05/22(月) 19:43:08
ちなみに確認に近いのですが、他サイトというのはインターネット
なのでしょうか?

むらし 2000/05/22(月) 19:51:01
他サイトとは、インターネット上ではなく、同じイントラ内
だけれども 私:むらし の手の届かない所にあります。
イントラ外からはアクセスできません。

ken 2000/05/23(火) 01:56:50
あまり良くないと思いますが
*1 の他サイトのURLを1秒ごとにチェックし
違ったら
フレームを解除してそのURLに飛ぶ
とかできないですかね?
動作確認していないのでわかりませんが...

Monaco 2000/05/23(火) 04:02:34
<BASE target="..">



href="javascript:.."
onclick="open(),location,etc..."

などは、相容れない事を経験的に憶えています。何となく理由が推測できそうですが、私には上手く説明出来ません。
ですから、とりあえず、面倒でも一々全ての <A> に target=".." を書くようにしています。


もしかしたら、これで解決するかもしれませんが、どうでしょうか。。。

dddd 2000/05/23(火) 05:32:46
>とりあえず、面倒でも一々全ての <A> に target=".." を書くようにしています。
自分のページだったらそれが一番手っ取り早いだろうけど、
書き換えられないリソースだから、じゃあどうしようか?
という質問だと思うんですけど。

shingo [E-Mail] [HomePage] 2000/05/23(火) 09:28:18
エラーが出る理由についてですけど、これはIEの仕様です。
他のフレームのドキュメントについて、ドメインが異なる場合
(www.aaa.comとwww.bbb.comのように)には、アクセスが制限
されます。ほとんどの書き込み動作が拒否されるはずです。

このへんについては書籍「InternetClientSDK DynamicHTML」
ISBN4-7561-1832-1のP231あたりに詳しく出ています。

解決方法についてですが、いまちょっと思っただけなので実現
可能かわかりませんが、frame1.onloadをトリガにして、frame
区切りを変えて見かけ上frame2を消す、というのではダメでしょ
うか。これなら、一切アクセスせずに出来そうですが。

dddd 2000/05/23(火) 09:53:34
>このへんについては書籍「InternetClientSDK DynamicHTML」
>ISBN4-7561-1832-1のP231あたりに詳しく出ています。
つーか本じゃなくて、msdn.microsoft.comでイイと思うんだけど。

shingo [E-Mail] [HomePage] 2000/05/23(火) 10:06:32
つーか、じゃあ本はなぜヨクナイですか?(謎)

むらし 2000/05/23(火) 10:21:30
[[解決]]
>ほとんどの書き込み動作が拒否されるはずです。
document.title すら拒否されました。^^;

>解決方法についてですが、いまちょっと思っただけなので実現
>可能かわかりませんが、frame1.onloadをトリガにして、frame
>区切りを変えて見かけ上frame2を消す、というのではダメでしょ
>うか。これなら、一切アクセスせずに出来そうですが。
Wao! その手があったか! 試してみます。
「戻る」にも対応できそうですし。

ひとまず、解決とさせて頂きます。
# もし駄目だったら、次は赤ラウンジ・・・ かな
皆様、ありがとうございました。

dddd 2000/05/23(火) 10:28:10
>つーか、じゃあ本はなぜヨクナイですか?(謎)
買わないと参照できない。職場によっては領収書切れなくて
すぐに参考資料として買うわけにも行かない場合がある。
webリソースに全て書いてあるのに買うのはあほらしい、というのも
アリかな。

shingo [E-Mail] [HomePage] 2000/05/23(火) 10:39:45
私がなぜオンラインだとヨクナイかを述べて終わりますね(笑)

まず、英語だからよくわかんない(私が。)
次に、オンラインで物を探すのは面倒(私が。)

この2点です。
で、私はオンラインにそのリソースがあるのか確認していませんから
本に情報があると書いたまでですよ。
まぁddddさんが探して、その情報へのポインタを示してくれるのは全く
構わないんじゃないでしょうか。

むらし 2000/05/24(水) 10:52:40
[[解決]]
2度目の「仮解決」 ^^;

残念ながら、frame1.onload を使う案は、うまく行きませんでした。
onload は、FRAMESET にはあるのですが、FRAME にはありませんでした。

やはり、CGI の力を借りないとできない様です。

shingo さん、お気を悪くなさらないで下さいね。
おかげさまで、良い勉強になりました。
重ね重ね、ありがとうございました。

[上に] [前に] [次に]