アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、片岡と言います。

私は、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

A 回答 (5件)

拡張子が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 …
    • good
    • 0
この回答へのお礼

k506d467 さん、回答ありがとうございます。
> サーバーが送るMIMEタイプが何か解りませんが、
> サーバーが送るMIMEタイプがapplication/xhtml+xmlならIE6は受け付けませんよ。
ご指摘通り、MIMEタイプは、application/xhtml+xmlでした。
私は、「Firefox2のエラー」と「IE6が終了する」の原因が同じだと思っていました。

拡張子をhtmlにすれば、IE6で終了しなくなりました。
また、Firefox2でも拡張子がhtmlであればエラーは出ませんでした。

それから、紹介していただいたwebページは、私の力では有効利用できませんでした。ごめんなさい。
k506d467 さん、ありがとうございます。

お礼日時:2007/04/09 21:58

同じエラーは出ませんでしたが、


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なんて嫌いだヽ(`Д´)ノ
    • good
    • 0
この回答へのお礼

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 さんありがとうございます。

お礼日時:2007/04/09 22:12

質問には関係ありませんが、


わざわざmaxを宣言せずに、
for (i=0; i<100; i++) {};
みたいにリテラルを使った方が早いかな。
    • good
    • 0
この回答へのお礼

KanjiTalk さん、回答ありがとうございます。
ご指摘どおり、提示されたコードの方がシンプルだと思います。
参考になりました。
KanjiTalk さん、ありがとうございます。

お礼日時:2007/04/09 22:03

直接の回答ではありませんが、


6で割り切れない場合は何もしないようですので、
iに1づつ足すのではなく、

var addNum = 6;
var i = addnNum;
var maxNum = 100;
while(i <= maxNum ) {
document.write(i, "<br>");
i = i + addNum;
}
の方が宜しいかと...
エラーも起きない可能性が大きいです。
    • good
    • 0
この回答へのお礼

vizzar さん、回答ありがとうございます。
提示されたコードを参考にしてみます。
vizzar さん、ありがとうございます。

お礼日時:2007/04/09 22:00

iがスコープ外(forの中で宣言されている)


よって

var i;
for(i = 1;i < max; i++)

が目的の動作をすると思うけど?
    • good
    • 0
この回答へのお礼

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 さん、ありがとうございます。

お礼日時:2007/04/09 21:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!