こんにちは、片岡と言います。
私は、JavaScriptを今回初めて書きます。また、HTMLもよくわかりません。
ファイル(1)"continue.xhtml" を Firefox2 で実行すると、エラー(2) が出ます。
どうすれば、エラーが出なくなるのでしょうか。
原因または解決策をご存知の方はいらっしゃいませんか。
●ファイル(1)"continue.xhtml"
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>continue</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<![CDATA[
var max = 100;
for (var i = 1; i < max; i++) {
if ((i % 6) != 0) {
continue;
}
document.write(i, "<br>"); //ここでエラーがでます。
}
]]>
</script>
</body>
</html>
●エラー(2)
> エラー: uncaught exception: [Exception... "Object cannot be created in this context"
> code: "9" nsresult: "0x80530009 (NS_ERROR_DOM_NOT_SUPPORTED_ERR)"
> location: "file:///C:/continue.xhtml Line: 21"]
また、Internet Explorer 6 で ファイル(1)"continue.xhtml" を実行すると、
webブラウザが終了します。
なお、"continue.xhtml"ファイルは、
JavaScriptプログラミング入門 第2版
( http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4- … )
の79ページの"continue.html"を参考にしました。
●私の環境は以下の通りです。
OS: Microsoft Windows XP Professional SP2
webブラウザ: Firefox/2.0.0.3 , Internet Explorer 6.0
No.2ベストアンサー
- 回答日時:
拡張子がxhtmlだからでは?
例えば
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>continue</title>
</head>
<body>
<div>
<script language="JavaScript" type="text/javascript">
<![CDATA[
var max = 100;
for (var i = 1; i < max; i++) {
if ((i % 6) != 0) {
continue;
}
document.write(i, "<br>"); //ここでエラーがでます。
}
]]>
</script>
</div>
</body>
</html>
とすると動くとか・・・
HTMLなら動くとか。
いろいろ考えられます。
サーバーが送るMIMEタイプが何か解りませんが、サーバーが送るMIMEタイプがapplication/xhtml+xmlならIE6は受け付けませんよ。
NS_ERROR_DOM_NOT_SUPPORTED_ERR
’DOM_NOT_SUPPORTED’が気になったので検索して見ました。
http://translate.google.com/translate?hl=ja&sl=e …
k506d467 さん、回答ありがとうございます。
> サーバーが送るMIMEタイプが何か解りませんが、
> サーバーが送るMIMEタイプがapplication/xhtml+xmlならIE6は受け付けませんよ。
ご指摘通り、MIMEタイプは、application/xhtml+xmlでした。
私は、「Firefox2のエラー」と「IE6が終了する」の原因が同じだと思っていました。
拡張子をhtmlにすれば、IE6で終了しなくなりました。
また、Firefox2でも拡張子がhtmlであればエラーは出ませんでした。
それから、紹介していただいたwebページは、私の力では有効利用できませんでした。ごめんなさい。
k506d467 さん、ありがとうございます。
No.5
- 回答日時:
同じエラーは出ませんでしたが、
if(!!document.write){
document.write('hello');
}else{
alert('no write');
}
とすると、'no write'のアラートが出ました。
環境は拡張子.xhtml、MIME Type application/xml、Win Fx2.0です。
MIME Typeをtext/hmtlにすると期待通り実行されるようですが、
> <![CDATA[
> ]]>
この記述がスクリプトエラーになりますので、
XHTMLの文法上はエラーになりますが、ブラウザの実装上 <![CDATA[ と ]]> はない方がいいと思います。
IEではブラウザに設定されていない拡張子は表示出来ないようです。
(MIME Typeがtext/htmlになっていてもMIME Typeを無視して、ブラウザの設定を優先させるようです。xhtmlが登録されていなければ、表示出来ないかソースをそのまま表示します。)
ので、拡張子は.htmlの方がいいのかも。。。
根本的な解決策ではありませんが、ご参考まで。
XHTMLなんて嫌いだヽ(`Д´)ノ
taloo さん回答ありがとうございます。
>if(!!document.write){
の記述は勉強になりました。
ところで、いろいろ調べたのですが、xhtmlでdocument.write()は使えないようです。
そのため、document.write()と同じ処理をしたければ、DOMを使用しなければいけないようです。
http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite
>Does document.write work in XHTML?
>
>No. Because of the way XML is defined, it is not possible to do tricks like this, where markup is generated by scripting while the parser is still parsing the markup.
>You can still achieve the same effects, but you have to do it by using the DOM to add and delete elements.
ただ、私は英語がわからないので間違っているかもしれません。
<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<title>continue</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<![CDATA[
var max = 100;
var i;
for (i = 1; i < max; i++) {
if ((i % 6) != 0) {
continue;
}
// document.write(i, "<br>"); と同様のコード
var txt = document.createTextNode(i);
document.body.appendChild(txt);
var br = document.createElement("br");
document.body.appendChild(br);
//
}
]]>
</script>
</body>
</html>
taloo さんありがとうございます。
No.4
- 回答日時:
質問には関係ありませんが、
わざわざmaxを宣言せずに、
for (i=0; i<100; i++) {};
みたいにリテラルを使った方が早いかな。
KanjiTalk さん、回答ありがとうございます。
ご指摘どおり、提示されたコードの方がシンプルだと思います。
参考になりました。
KanjiTalk さん、ありがとうございます。
No.3
- 回答日時:
直接の回答ではありませんが、
6で割り切れない場合は何もしないようですので、
iに1づつ足すのではなく、
var addNum = 6;
var i = addnNum;
var maxNum = 100;
while(i <= maxNum ) {
document.write(i, "<br>");
i = i + addNum;
}
の方が宜しいかと...
エラーも起きない可能性が大きいです。
vizzar さん、回答ありがとうございます。
提示されたコードを参考にしてみます。
vizzar さん、ありがとうございます。
No.1
- 回答日時:
iがスコープ外(forの中で宣言されている)
よって
var i;
for(i = 1;i < max; i++)
が目的の動作をすると思うけど?
SAYKA さん、回答ありがとうございます。
次のhtmlファイルを私の環境で実行してみました。
しかし、IE6とFirefox2で問題はありませんでした。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>scopetest</title>
<!-- Create: 2007-04-08T22:03:51+9:00 -->
<!-- Last update: 2007-04-08T22:14:01+9:00 -->
</head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
for (var i = 0; i < 2; i++) {
window.alert(i);
}
var j;
for (j = 3; j < 5; j++) {
window.alert(j);
}
//-->
</script>
</body>
</html>
ただ、他の環境ではエラーが出るかもしれません。
JavaScriptのスコープについて、私は、よくわかっていませんでした。
勉強しなおします。
SAYKA さん、ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript セレクトボックスを2つ設けて選択して初めてメッセを表示 1 2022/07/27 12:15
- JavaScript switch文のswitch(n)の部分を複数の値にするか、if文に変えてほしいです。 1 2022/07/27 17:18
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- ASP・SaaS FC2 BLOG <AUDIO TAGを入れプレビューはOk テーンプレートを更新すると ✖ 1 2023/08/14 11:40
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptでiframeの内容を「...
-
getElementsByNameで要素が取得...
-
return falseが効かない(F5キ...
-
IFRAME内のソースを別のIFRAME...
-
SSIをJavascriptの変数に割り当...
-
時間帯○時○分で表示切替
-
XMLHTTPRequestでstatusが0に
-
iframeの中から親ページをスム...
-
htaでVBSのソースを書いたらエ...
-
ajax で読み込みを途中で止めた...
-
SCRIPT5007: 未定義または NULL...
-
6で割り切れる数を表示するJava...
-
字数計算ソフト
-
リンク移動先のURLを取得
-
Webサイトを表示時にタイトルの...
-
Backbone.js イベントが効かない
-
JavaScript でキーを送る
-
idHOGEで取得したinnerText(数...
-
bodyタグのfocus
-
インラインフレーム内から親フ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
getElementsByNameで要素が取得...
-
JavaScriptでiframeの内容を「...
-
function の return 値を表示し...
-
SCRIPT5007: 未定義または NULL...
-
ボタンのID名を取得するには?
-
JavaScript でキーを送る
-
フォーカス移動抑止について
-
乱数を一定時間毎に表示させた...
-
ボタンを押してテキストエリア...
-
JavaScriptでのEnterキーとAlt+...
-
bodyタグのfocus
-
自動ジャンプでフォームデータ...
-
リンク移動先のURLを取得
-
一定時間画像を表示させ、その...
-
idHOGEで取得したinnerText(数...
-
「オブジェクトを指定してくだ...
-
キーを押している間の時間を計...
-
html javascript 作った配列を...
-
チェックボックスの選択パター...
-
JavaScriptでのBMI計算について
おすすめ情報