Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JavaScript エラー: const プロパティが再定義されています。など

外部ファイルとしてJavaScriptをインポートして使っています。
ページを開くとまずタイトルのようなエラーが出ます。
デバッグしてみるとグローバル変数の初期化をしようとしているところでエラーとなっているようでした。
そこで、宣言と初期化を一緒に行わず、とある関数の中で変数に値を入れることにしました。
それでも同じエラーが出ました。
そもそもグローバル変数をその場で初期化することは問題ないと思うのですが、何が原因なのでしょうか?
また、HTMLでdivタグにidを割り当て、その中にJavaScriptでinnerHTMLを使ってid付きのcanvasを埋め込もうとしています。
埋め込みと同じ関数で埋め込んだ後に2Dコンテキストを得ようとすると、以下のようなエラーが出ました。
エラー: オブジェクトは 'getContext' プロパティまたはメソッドをサポートしていません。
innerHTMLによる変更が終わる前にgetContextしてしまっているのでしょうか?

現在作っているhtmlファイルとjsファイルを提示します。
bound_ball_editor_for_Web.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bound ball editor for Web</title>
<script type="text/javascript" src="bound_ball_editor_for_Web.js"></script>
</head>
<body onload=setting()>
<table>
<tr><td>
<div id="canvas"></div>
</td><td>
<div id="setting"></div>
</td></tr>
</table>
</body>
</html>

bound_ball_editor_for_Web.js
/**
 * 
 */

var pc=true;
var window;

function setting(){
    if ((navigator.userAgent.indexOf('iPhone') > 0 && 
            navigator.userAgent.indexOf('iPad') == -1) ||
            navigator.userAgent.indexOf('iPod') > 0 ||
            navigator.userAgent.indexOf('Android') > 0) { 
        pc=false;
    }
    if(pc==true){
        document.getElementById("canvas").innerHTML="<canvas id=\"window\" width=\"140\" height=\"100\"></canvas>";
        document.getElementById("setting").innerHTML="";
    }
    else{
        document.getElementById("canvas").innerHTML="<canvas id=\"window\" width=\"140\" height=\"100\"></canvas>";
        document.getElementById("setting").innerHTML="";
    }

    window=document.getElementById("window");
    if(!window){
        return;
    }
    window = window.getContext('2d');
    if(!window){
        return;
    }

    window.strokeStyle="#000000";
    window.strokeRect(0, 0, window.width, window.height);   
}

PCとスマホとでcanvasのサイズやレイアウトを変更したりする予定ですが、まだその辺は特にやっていないので現在はまだ同じ設定になっています。

そういえばwindow変数を作ったりする前はエラーが出なかったとwindow変数の宣言やwindow変数を使っている部分を消して試してみるとやはりエラーは出ませんでした。
windowって予約語だったかな?とwinに変更(これこそ予約語?)して試してみても結果は同じでした。
なにが原因なのでしょうか?

3

回答

8820

閲覧

3件の回答

評価

0

windowは今開いてるページ自体を示すオブジェクトだが、
それ以前にここはJavaScriptの掲示板じゃないよ。

評価

0

やはりwindowは予約語だったんですね。
windowを予約語じゃないだろうgに変えたらエラーが出なくなりました。
でもそのあとの描画がうまくいかなかったのですが、これはしばらく自分で考えてみようと思います。

>それ以前にここはJavaScriptの掲示板じゃないよ。
JavaScriptはJavaの仲間だと思っていて、全く同じではないですが、ここで質問してもいいと思っていました。
この掲示板をJavaScriptという単語で検索してみると10ページ(以上?)もの検索結果が出てきましたし。

評価

0

多くのそうした質問の返答として、同じ回答があったろう。
JavaScriptは当初LiveScript…なんてのはぐぐってみれば
良くて、結論としては「似て非なるもの」。

そうだな…。
例えば「Cの流れを汲む」とか、「Webアプリの一部を司る」
なんて大きな括りなら、仲間と言えるか。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。