プロが教える店舗&オフィスのセキュリティ対策術

HTML文書中、Javascriptのdocument.writeで文章を挿入します。

■HTML------------------
<html><body>
文字列
<script language="JavaScript" src="message.js"></script>
文字列
</body></html>

■message.js------------
document.open();
document.write("<a href=\"---\">リンク<\/a>]");
document.close();
------------------------

この場合、message.js中はdocument.open();とdocument.close();を書くのは正しいことですか?

document.open();の意味を調べると「ドキュメントを開いて書込み可能にします。」とあって、その「ドキュメントを開く」という意味合いが理解できません。
http://www.tohoho-web.com/js/document.htm

上記でブラウザでは狙ったとおり(文字列が埋め込まれた状態)に表示されますが、
1、正しい書き方なのか
2、この場合document.open();の意味
を教えてください。

A 回答 (2件)

ドキュメントを開くというのは、要するに「ドキュメントへの書き込みを許可する」ということですねー。

そしてcloseで「書き込みを完了する」ということですねー。これは、ファイルアクセスとか通信とかでよく使われる手法ですが、それと同じ感覚で、ドキュメントへの書き込みも「許可」「書き込み」「完了」という手続きで行うようになっているんですねー。ですから、その書き方は正しい書き方ですよー。

だけど、実際問題として、そんな書き方する人、いませんねー。なぜかというと、document.openとcloseは、省略できるからですよー。document.writeをした際に、まだopenしていなければ自動的にdocument.openされますし、closeしてなくともドキュメントの出力が完了すれば自動的にcloseされます。ですから、open/closeの存在すら知らない人のほうが多いと思いますよー。

JavaScriptはそーゆーのが多いですねー。つまり「本当はこうするんだけど、別にしなくてもいい」というのですねー。たとえば変数を使うとき、「x = 100」とか書きますねー。だけど、変数は最初に「var x」と変数宣言を書いて変数の使用を開始するのですねー。だけど、JavaScriptは「var xしてなければ、最初に変数xを使うときに勝手にvar xしてくれる」ので、みんなvarなんか使わずに書いちゃいますねー。それと同じですよー。
    • good
    • 0
この回答へのお礼

分かりやすい回答有難うございます。
意味を理解できました。
省略している説明サイトも見かけたので意味が違うと思っていましたが、省略可能なわけなのですね。

お礼日時:2009/11/18 16:40

「document.openとcloseは、省略できるからですよー。


というのは、確かにそうですが、それはブラウザーが拡大解釈しているから
ですよ。だからブラウザーによってはだめな場合があります。openはともかく、
特にdocument.close()をやらないと、正常に表示できない事はよくあります。
それから var付きで変数宣言しないと、グローバルスコープの変数として
扱われますから、関数内で省略する時は要注意ですよ!
例えば
function A(){x=10;}
function A(){x=1;}
function c(){y=x;return y;}
だとC()で1が返されます。
function A(){x=10;}
function A(){var x=1;}
function B(){var y=x;return y;}
だとC()で10が返されます。
    • good
    • 0
この回答へのお礼

省略OKというのはあくまでブラウザ側での挙動というわけですね。
省略せず記述していこうと思います。

関数内とグローバルの変数宣言の扱いもよくやるミスなので
為になりました。有難うございます。

お礼日時:2009/11/18 16:42

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