投稿日:2002年11月03日 作成鷹の巣

No.6159 W3C//DTD HTML 4.01//ENでフレームを解除する最適な方法は?



W3C//DTD HTML 4.01//ENでフレームを解除する最適な方法は?

No.6159 投稿時間:2002年11月03日(Sun) 11:01 投稿者名:鷹の巣 URL:http://sakaguch.com/

あるサイトからのリンクで、フレーム内ではないのですが、ブラウザIE6で確認すると、
アドレス欄がリンク元のURLのままになっているので、head要素内に
<base href="http://sakaguch.com/" target="_top">
を追加しました。するとAnother HTML-lint gatewayで、HTML4.01 Strict としてHTML文書の文法を
チェックしますと99点になってしまいました。
HTML4.01 Transitionalにすれば良いのですが、target="xxx"がいけないようです。

どなたか、HTMLの記述だけ(JavaやCGI等は使用しない)で対処する方法をご存知の方が
おられましたら、教えて下さい。


以下は、現在の私のサイトのトップページのタグの一部分です。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ja-JP">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta name="description" content="初期費用0円年間1200円以下...">
<meta name="KeyWords" content="HAMMERNODE,...">
<meta name="robots" content="INDEX,FOLLOW">
<base href="http://sakaguch.com/" target="_top"> <------------------※このタグを追加。
<link rev="made" href="mailto:webmaster@sakaguch.com">
<link rel="index" href="./index.html">
<!--外部 style sheetの読込み-->
<link rel="stylesheet" href="./style.css" type="text/css">
<link rev="made" href="mailto:webmaster@sakaguch.com">
<link rel="index" href="/index.html">
<link rel="contents" href="/index.html">
<link rel="start" href="/index.html">
<link rel="next" href="Maegaki.html">
<title>「鷹の巣」の自宅サーバー</title>
...
</head>


ほんとはフレーム内なのでは?

No.6180 投稿時間:2002年11月03日(Sun) 23:29 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

その前にフレーム内でもないのになぜアドレス欄がリンク元URLのままなのかが謎ですが・・・。

ほんとはフレーム内なのでは?
(上下に分けて下か上を1にして残りに本体を出してるとか)


javaのフレーム(?)が残っている様な感じです。

No.6192 投稿時間:2002年11月04日(Mon) 12:54 投稿者名:鷹の巣 URL:http://sakaguch.com/

> その前にフレーム内でもないのになぜアドレス欄がリンク元URLのままなのかが謎ですが・・・。
>
> ほんとはフレーム内なのでは?
> (上下に分けて下か上を1にして残りに本体を出してるとか)

特殊なフレーム転送で、リンク元は、javaを使用しています。
フレームは、残っていません。ブラウザがリンク元のjavaスクリプトを引き継ぐのだと考えています。

<base href="http://sakaguch.com/" target="_top">
を入れなければ、ブラウザのアドレス欄は、ずっとリンク元のままです。
HTMLソースを表示すると自サイトのソースが表示されます。

<base href="http://sakaguch.com/">だけでは、ブラウザのアドレス欄が変わらないため、
javaのフレーム(?)が残っている様な感じです。

# リンク元のURLは、公開出来ませんが、勉強目的であれば、メールにてリンク元のURLを連絡させて頂きます。
# 但し、勉強目的ですから、リンク元への非難は、ご遠慮願います。


リンク元URLを教えてください。

No.6215 投稿時間:2002年11月04日(Mon) 21:30 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

> # リンク元のURLは、公開出来ませんが、勉強目的であれば、メールにてリンク元のURLを連絡させて頂きます。
> # 但し、勉強目的ですから、リンク元への非難は、ご遠慮願います。

気になるのでそのリンク元URLを教えてください。
申し訳ないですがメールアドレスはここには書きたくないのでウチのサイトの管理人への連絡にあるメールアドレスへ送ってください。
(最近DMやウイルス付きが多くくるので・・・)


私もリンク元URLを教えてください。

No.6219 投稿時間:2002年11月05日(Tue) 00:58 投稿者名:水芹 URL:http://www.dream-seed.com

こんばんは。

私も気になるのでできたらURLを下さい。

考えられることは、一見リンクで飛ばしている振りをしつつ、実はソケットでページ全体を読み込んでいるだけとか(そんなことはしないと思いますが)。

Strictの場合、targetは閲覧するユーザーが指定すべき(指定できるべき)という考えで、含まれていませんね。
そもそもStrictではフレームを扱わないのでターゲットフレームを指定する必要がありませんし。
ただ、Strictだからという理由でAnother HTML-lint gatewayの採点に厳密に従う必要はないと思います。逆にAnother HTML-lint gatewayで100点だからといって必ずしも正しいマークであることが保証されるわけでもないですし。


解析する時間がないんで来週までまってください。

No.6220 投稿時間:2002年11月05日(Tue) 01:52 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

URL受け取りました。
なかなか手の込んだサイトですね。(笑)

今はちょっと解析する時間がないんで来週までまってください。
(報告はメールでさせていただきます。)


Iwaさんのご指摘通りでした。

No.6228 投稿時間:2002年11月05日(Tue) 18:45 投稿者名:鷹の巣 URL:http://sakaguch.com/

> 今はちょっと解析する時間がないんで来週までまってください。
> (報告はメールでさせていただきます。)

Iwaさんのご指摘通りでした。
ブラウザのIE6で、「表示(V)」-「ソース(C)」から、HTMLソースを表示させると
下記の様なリンク元のフレームが残っていました。
# 一般的なフレームを使用した方法でした。
# 「幽霊の正体見たり、枯れ尾花」でした。

<html><head>
<title></title>
</head>
<frameset frameSpacing="0" rows="150%,0">
<frame name="xxx" src="http://sakaguch.com/">
<frame src="takanosu_index.html">
<noframes><P>「鷹の巣」の自宅サーバー</P></noframes>
</frameset>
</html>

# javaでどの様にして実現するのか解らなかったので、判断を間違いました。
# <form><input type=button value="URL移動" onclick="self.location.replace('http://sakaguch.com/')"></form>
# でもブラウザのURLアドレス欄が移動先に変わるので、java scriptでの実現方法が解りませんでした。

> HTMLソースを表示すると自サイトのソースが表示されます。

ブラウザのIE6で、移動先のWebページで右クリック又は、shift+F10でソースを表示すると、
移動先のWebページのHTMLソースが表示されていました。
大変、お騒がせ致しまして、申し訳ありません。


<body onload="...">では、どうでしょうか?

No.6230 投稿時間:2002年11月05日(Tue) 19:29 投稿者名:水芹 URL:http://www.dream-seed.com

こんばんは。

target=_TOP 以外の解決策ですが、こんなのはどうでしょう?

<body onload="if(top.location.href!=location.href)top.location.href=location.href;">

フレームに読み込まれたら、強制的にフレームを解除します。

# しかし、いろいろ考える人がいるものですねぇ。


HEAD内に記述するJavaScriptによる代替方法。

No.6234 投稿時間:2002年11月05日(Tue) 22:38 投稿者名:水芹 URL:http://www.dream-seed.com

先ほどの方法、フレームと中身のドメインが異なると無効になるみたいですね。
なので代替方法。

<script language="JavaScript">
<!--
if(self !=top){
top.location.href=self.location.href;
}
// -->
</script>

これを<HEAD>内に記述すればうまくいくようです。


この方法は、うまく出来ました。ありがとうございました。

No.6241 投稿時間:2002年11月06日(Wed) 00:20 投稿者名:鷹の巣 URL:http://sakaguch.com/

> 先ほどの方法、フレームと中身のドメインが異なると無効になるみたいですね。
> なので代替方法。
> 
> <script language="JavaScript">
> <!--
> if(self !=top){
> top.location.href=self.location.href;
> }
> // -->
> </script>

この方法は、うまく出来ました。ありがとうございました。
リロードをくり返しますが、if(top.location.href!=location.href)を抜くと
<body  onload="top.location.href=location.href;">
は、動作する様です。ブラウザIEのJava VMのバグでしょうか。


フレームを解除する基本形は、
<head>
...
<base href="http://sakaguch.com/" target="_top"> <--- Java Scriptを実行しないブラウザ用。
<script language="JavaScript">
<!--
function ScriptName() { <---------------------- スクリプト名は、headタグの間で定義しておく。(安全上)。
    if (self != top) { top.location.href = self.location.href; }
}
// -->
</script>
</head>
<body onload="ScriptName()"> <----------------- ページが開いた時にJava Scriptを実行する場合の定形。

ということでしょうか。基本に忠実にやれば良かったと反省しています。
Iwaさんのために週末まで、これらのタグとスクリプトを入れたままにしておきます。

# 水芹さんのサイトで、フレーム外しのTipsとして、記事にして頂くと嬉しいです。


結局はJavaScriptで落ち着きましたか

No.6264 投稿時間:2002年11月07日(Thu) 02:30 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

> > <script language="JavaScript">
> > <!--
> > if(self !=top){
> > top.location.href=self.location.href;
> > }
> > // -->
> > </script>

ウチのサイトでは似たような感じのスクリプトで逆のことをやってます。
(フレーム上で表示すべきHTMLを直接呼んだらフレームセットに飛ばす)

> ブラウザIEのJava VMのバグでしょうか。

VMはJava用なのでJavaScriptの動作には関係ないと思いますが・・・。
(JavaとJavaScriptはまったく別物ですから)


面積の大きい方を親フレームにすれば...

No.6276 投稿時間:2002年11月07日(Thu) 23:43 投稿者名:鷹の巣 URL:http://sakaguch.com/

> ウチのサイトでは似たような感じのスクリプトで逆のことをやってます。
> (フレーム上で表示すべきHTMLを直接呼んだらフレームセットに飛ばす)

色々ありますね。あまり、詳しくないのですが、XHTML1.1では、フレームは、あるのでしょうか?
フレームを構成する場合は、面積の大きい方を親フレームにすれば、各ページを開いた場合に
ブラウザのアドレス欄に各ページのアドレスが表示されますので、直リンクしやすいのですが。
私がフレームを使用しないのは、直リンクしたり、直リンクされたりが出来にくいことが上げられます。

> > ブラウザIEのJava VMのバグでしょうか。
>
> VMはJava用なのでJavaScriptの動作には関係ないと思いますが・・・。
> (JavaとJavaScriptはまったく別物ですから)

間違いました。ご指摘通りでした。


今後はフレームをやめましょうということです。

No.6288 投稿時間:2002年11月08日(Fri) 17:22 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

> 色々ありますね。あまり、詳しくないのですが、XHTML1.1では、フレームは、あるのでしょうか?

フレームはXHTML1.0 Transitionalだけです。(XHTML 1.0 Frameset)
XHTML1.0 StrictおよびXHTML1.1からはW3Cの仕様書から外されてます。
(要するに、今後はフレームをやめましょうということです。)


教えて頂いてありがとうございました。

No.6296 投稿時間:2002年11月09日(Sat) 00:10 投稿者名:鷹の巣 URL:http://sakaguch.com/

> > 色々ありますね。あまり、詳しくないのですが、XHTML1.1では、フレームは、あるのでしょうか?
>
> フレームはXHTML1.0 Transitionalだけです。(XHTML 1.0 Frameset)
> XHTML1.0 StrictおよびXHTML1.1からはW3Cの仕様書から外されてます。
> (要するに、今後はフレームをやめましょうということです。)

やはり、そうでしたか。教えて頂いてありがとうございました。
フレームは、画面の表示面積が減るので、個人的に好きではなかったのですが、
将来のことを考えると、Strictを選択すべきでしょうね。

私のサイトの全ページ(約50数頁)とCGIから生成した掲示板の過去ログのHTMLページ(約1000頁)を
HTML4.01 Strictから、XHTML1.0 Strictに書き換えました。
一応、Another HTML-lint gatewayで100点が出ることを確認しました。

この掲示板と同じKent-webのWeb Forumをご使用の方で、過去ログから、XHTML1.0 Strictのhtmlファイルを
生成されたい方がおられましたら、Perlのソース(PastList.pl)を参考用として、配布させて頂きます。
(このファイルのサブルーチンには、Web Forumのサブルーチンを含みます。)
ご希望の方は、私宛にメールにてご請求願います。


訂正

No.6303 投稿時間:2002年11月09日(Sat) 02:42 投稿者名:Iwa URL:http://moranet.infoseek.livedoor.com

おおっと間違えました。

XHTML1.0 Strict もフレーム内表示OKでした。
ダメなのは1.1からです。

それと、追記ですがフレームを使うにはTransitionalでもStrictは使わず、Framesetという専用のDOCTYPE宣言でフレームセットを書く必要があります。

以下はフレームセットの例です。

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<title>Home Page</title>
</head>
<frameset cols="205,*">
<frame src="menu.html" name="content" scrolling="auto" />
<frame src="index2.htm" name="main" />
<noframes>
<body>
<p><font color="#ff0000" size="5"><strong>このページをご覧いただくにはフレーム対応のブラウザが必要です。</strong></font></p>
</body>
</noframes>
</frameset>
</html>


実例のご紹介ありがとうございました。

No.6304 投稿時間:2002年11月09日(Sat) 13:16 投稿者名:鷹の巣 URL:http://sakaguch.com/

> XHTML1.0 Strict もフレーム内表示OKでした。
> ダメなのは1.1からです。
>
> それと、追記ですがフレームを使うにはTransitionalでもStrictは使わず、Framesetという専用のDOCTYPE宣言でフレームセットを書く必要があります。

Another HTML-lint gateway
http://openlab.ring.gr.jp/k16/htmllint/htmllint.html
を見て見ますと、最新のHTML文書は以下の様になっていました。
HTML4.01 Strict
HTML4.01 Transitional
HTML4.01 Frameset
XHTML1.0 Strict
XHTML1.0 Transitional
XHTML1.0 Frameset
XHTML1.1

この中で、私は、属性`name`と属性`lang`等を含む「XHTML1.0 Strict」が現在、最もブラウザを選ばないと
判断し、 HTML4.01 Strictより移行しました。

# 今までは、Front Page 2000を使用して、ワープロ感覚でWebページを書いていて、
# HTMLの文法等は全く気にしていませんでした。現在、反省しております。

> 以下はフレームセットの例です。

実例のご紹介ありがとうございました。


フレーム外しのTipsを公開しました。

No.6265 投稿時間:2002年11月07日(Thu) 07:48 投稿者名:水芹 URL:http://www.dream-seed.com

> # 水芹さんのサイトで、フレーム外しのTipsとして、記事にして頂くと嬉しいです。

一応、サイトの方でまとめてみました。
間違いがありましたらご指摘ください。

http://www.dream-seed.com/server/frame.html


有用な内容のご公開ありがとうございました。

No.6277 投稿時間:2002年11月07日(Thu) 23:47 投稿者名:鷹の巣 URL:http://sakaguch.com/

> 一応、サイトの方でまとめてみました。
> 間違いがありましたらご指摘ください。
>
> http://www.dream-seed.com/server/frame.html

Javaは、全くの初心者ですから、指摘出来ません。
私にも大変解りやすく、また読み応えのある内容でした。
どのページから、リンクしようか思案中です。その内にリンクさせて頂きます。
有用な内容のご公開ありがとうございました。


|目次|掲示板|過去ログ目次|▲頁先頭|