Subversion Repositories FAQs

Compare Revisions

Last modification

Ignore whitespace Rev 24 → Rev 25

/trunk/cljs/index.xml
1,2134 → 1,37
<!DOCTYPE FAQ [
<!ENTITY trade "&#8482;"><!-- trade mark sign, U+2122 ISOnum -->
<!ENTITY meta SYSTEM "sections/meta.xml">
<!ENTITY overview SYSTEM "sections/overview.xml">
<!ENTITY resources SYSTEM "sections/resources.xml">
<!ENTITY functions SYSTEM "sections/functions.xml">
<!ENTITY dates SYSTEM "sections/dates.xml">
<!ENTITY numbers SYSTEM "sections/numbers.xml">
<!ENTITY objects SYSTEM "sections/objects.xml">
<!ENTITY strings SYSTEM "sections/strings.xml">
<!ENTITY dom SYSTEM "sections/dom.xml">
<!ENTITY windows SYSTEM "sections/windows.xml">
<!ENTITY server SYSTEM "sections/server.xml">
<!ENTITY debugging SYSTEM "sections/debugging.xml">
<!ENTITY donts SYSTEM "sections/donts.xml">
<!ENTITY suggestions SYSTEM "sections/suggestions.xml">
]>
<FAQ VERSION="32.2" DATE="2010-10-08" revision="$Revision$" id="$Id$">
<TITLE>FAQ for comp.lang.javascript</TITLE>
<CONTENTS>
<CONTENT TITLE="Meta-FAQ meta-questions" ID="meta" NUMID="1">
<P>
This is the <EM>comp.lang.javascript</EM> meta-FAQ, <VER/>. The latest
version is available at <URL>http://jibbering.com/faq/</URL> in HTML form.
</P>
<P>
Each day, one section of the FAQ is posted for review and questions,
and as a reminder that the FAQ is available.
</P>
<P>
For additional explanation and detail relating to some aspects
of the FAQ, please see the
<URL LINKTEXT="FAQ Notes">notes/</URL>.
It has been provided separately to avoid increasing the size of
the FAQ to a point where it would be unreasonable to post it to
the group.
</P>
<P>
Code examples in this FAQ use <URL LINKTEXT="JSDoc Toolkit"
>http://jsdoctoolkit.org/</URL> comments.
</P>
<CONTENT TITLE="Which newsgroups deal with javascript?" ID="newsgroups" NUMID="2_1">
<P>
The official Big 8 Usenet newsgroup dealing with javascript is
<NEWSGROUP>comp.lang.javascript</NEWSGROUP>.
Some "language" hierarchies also have *.comp.lang.javascript groups.
</P>
<P>
c.l.js is an unmoderated newsgroup.
</P>
</CONTENT>
<CONTENT TITLE="What questions are on-topic for comp.lang.javascript?" ID="appropriateQuestions" NUMID="2_2">
<P>
The comp.lang.javascript newsgroup deals with ECMAScript
languages, so any questions about JavaScript or JScript are
welcome. However, the majority of questions sent to this group
relates to javascript in a web browser. If you are experiencing
issues with a particular browser, or the host is not a browser
at all, please make this information clear.
</P>
<P>
Javascript and Java are two completely different languages.
Java questions should be asked in one of the comp.lang.java.*
newsgroups; they are not appropriate for c.l.js (as Java and
javascript are distinct programming languages with only
superficial similarities due to sharing a C-like syntax and
some of the characters in their names).
</P>
<P>
Questions dealing with other scripting languages, such as
VBScript, PerlScript or CGI scripting are also off-topic,
as are HTML-only or CSS-only questions.
</P>
<!--
<P>
Questions about the design of various javascript libraries are
appropriate; questions on how to <EM>use</EM> such libraries
are not. Check <URL LINKTEXT="c.l.js FAQ Resources"
>http://jibbering.comindex.html#libraryResources</URL> or search the web.
</P>
-->
<P>
Questions that are specific to Microsoft's JScript may also
be appropriately asked at:
<NEWSGROUP>microsoft.public.scripting.jscript</NEWSGROUP>
</P>
<P>
The comp.lang.javascript newsgroup charter is included in
<URL>faq_notes/cljs_charter.html</URL>.
</P>
</CONTENT>
<CONTENT TITLE="What should I do before posting to comp.lang.javascript?" ID="posting" NUMID="2_3">
<P>
Before posting to c.l.js, you should read this document.
You should also check the <URL LINKTEXT="Resources section">#onlineResources</URL>.
</P>
<LIST TYPE="UL" TITLE="How to Ask a Question" ID="ask">
<LI>State your question clearly and concisely.</LI>
<LI>Use the Subject: line to show the type of problem you have but
include the question in the body as well.</LI>
<LI>For a more detailed explanation of formatting, see
&quot;<URL LINKTEXT="Posting Questions and Replies to comp.lang.javascript">notes/posting/</URL>&quot;.</LI>
</LIST>
 
<LIST TYPE="UL" TITLE="Replying" ID="reply">
<LI>Quote only relevant parts of earlier messages, and add your
comments below each quoted section
(<URL LINKTEXT="FYI28/RFC1855">http://www.ietf.org/rfc/rfc1855.txt</URL>).</LI>
<LI>Link to specific sections of the FAQ that are relevant.</LI>
<LI>Avoid being unnecessarily rude, but do not complain about other rude posts.</LI>
<LI>Don't quote signatures.</LI>
</LIST>
<LIST TYPE="UL" TITLE="Posting Code" ID="postCode">
<LI>
Remove everything that does not contribute to the problem (images,
markup, other scripts, etc).
</LI>
<LI>Validate the HTML and CSS <URL>http://validator.w3.org/</URL>,
<URL>http://jigsaw.w3.org/css-validator/</URL>.</LI>
<LI>Make sure the code is executable as transmitted.</LI>
<LI>Format lines to 72 characters; indent with 2-4 spaces (not tabs).</LI>
<LI>State what you expect the code to do.</LI>
<LI>Mention the platforms, browsers, and versions.</LI>
<LI>See also the <URL LINKTEXT="FAQ section on debugging">#debugging</URL>.</LI>
<LI>Post in plain-text only. Do not encode it. Do not attach files.</LI>
<LI>If the code is more than about 100 lines, provide a URL in addition.</LI>
<LI>Do not multi-post; cross-post if necessary
(<URL LINKTEXT="Wikipedia description">http://en.wikipedia.org/wiki/Cross-post</URL>).</LI>
</LIST>
<LIST TYPE="UL" TITLE="What Not to Post" ID="doNotPost">
<LI>Do not post job postings. Job postings should go to
an appropriate regional jobs group.</LI>
<LI>Do not post copyright material without permission
from the copyright holder.</LI>
</LIST>
<P>
Relevant announcements are welcome, but no more often than once
per major release, as a short link to the product's webpage.
</P>
</CONTENT>
<CONTENT TITLE="Why was my post not answered?" ID="noAnswer" NUMID="2_4">
<P>This could be for several reasons:</P>
<UL>
<LI>It was a variation of a frequently asked question and was
therefore ignored by everyone.</LI>
<LI>Nobody knows the answer.</LI>
<LI>The person with the answer has not seen the post.</LI>
<LI>It might not be possible to do what you want to do but perhaps
readers of c.l.js are reluctant to answer your post in the negative
when they are not convinced that it cannot be done.</LI>
<LI>The question was not asked clearly enough, or did not included
enough information to be answered.</LI>
<LI>The questioner did not realise the need to read the group, for a
few days, to see the answers posted there.</LI>
<LI>You ignored the <URL LINKTEXT="section on posting">#posting</URL></LI>
</UL>
 
<p>If it is not one of these, then after a few days consider
reposting after checking
<URL>http://groups.google.com/group/comp.lang.javascript/topics</URL>
for replies. Make sure the post is phrased well, and everything
needed to answer is correct, and the subject is appropriate.</p>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Language Overview" ID="tips" NUMID="2">
<CONTENT TITLE="What is ECMAScript?" ID="ecma" NUMID="2_6">
<P>
<URL LINKTEXT="ECMA-262">http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
is the international standard that current language implementations
(JavaScript&trade;, JScript etc.) are based on.
</P>
<P>
<URL LINKTEXT="ECMA-262">http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
defines the language Syntax, Types, Keywords, Operators, and built-in
objects. The ECMAScript specification is the reference to determine the
expected behavior of a program. ECMAScript does not define any host
objects, such as <ICODE>document</ICODE>, <ICODE>window</ICODE>, or
<ICODE>ActiveXObject</ICODE>.
</P>
<P>
ECMA-327 defines the Compact Profile of ECMAScript by
describing the features from ECMA 262 that may be omitted in some
resource-constrained environments.
<URL>http://www.ecma-international.org/publications/standards/Ecma-327.htm</URL>
</P>
<P>
The most widely supported edition of ECMA-262 is the 3rd edition (1999).
There is fair support for this edition in JScript 5.5+ (buggy) and good
support JavaScript 1.5.
</P>
<P>
The term "javascript" is used as a common name for all dialects of ECMAScript.
</P>
</CONTENT>
<CONTENT TITLE="What is JScript?" ID="jScript" NUMID="2_7">
<P>
JScript is Microsoft's implementation of ECMAScript.
</P>
<P>
Questions that are specific to Microsoft's JScript may also
be appropriately asked at:
<NEWSGROUP>microsoft.public.scripting.jscript</NEWSGROUP>.
</P>
</CONTENT>
<CONTENT TITLE="What is the Document Object Model (DOM)?" ID="dom" NUMID="2_9">
<P>
The <DFN>Document Object Model</DFN> (DOM) is a interface-based model for <ICODE>Document</ICODE>
objects. The DOM allows scripts to dynamically access and update a
document's content, style, and event handlers.
</P>
<P>
The DOM is <EM>not</EM> part of the ECMAScript programming language.
</P>
<P>
Official DOM standards are defined by the World Wide Web Consortium.
Scriptable browsers also have <DFN>proprietary</DFN> DOM features (<URL
LINKTEXT="MSDN">http://msdn.microsoft.com/en-us/library/ms533050(VS.85).aspx</URL>, <URL
LINKTEXT="MDC">https://developer.mozilla.org/en/DOM_Client_Object_Cross-Reference</URL>),
such as <ICODE>document.writeln()</ICODE>.
</P>
<P>
Also see the section on <URL LINKTEXT="DOM and Forms">#domRef</URL>.
</P>
<MOREINFO>
<URL LINKTEXT="c.l.js DOM Resources">#onlineResources</URL>
<URL LINKTEXT="W3C DOM FAQ">http://www.w3.org/DOM/faq.html</URL>
<URL LINKTEXT="W3C DOM ">http://www.w3.org/DOM/</URL>
<URL LINKTEXT="MDC: What is the DOM?">https://developer.mozilla.org/en/Gecko_DOM_Reference/Introduction#What_is_the_DOM.3F</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Internationalisation and Localisation in javascript" ID="localization" NUMID="2_10">
<P>
<DFN>Internationalisation</DFN> means using one form which is everywhere both
acceptable and understood. Any international standard not supported by
default can be coded for.
</P>
<P>
For example, there is an International Standard for numeric Gregorian
date format; but none for decimal and thousands separators.
</P>
<P>
<DFN>Localisation</DFN> is the process of adapting software for a specific region
or language by adding locale-specific components and translating text. It
cannot work well in general, because it requires a knowledge of all
preferences and the ability to choose the right one, in an environment
where many systems are inappropriately set anyway.
</P>
<P>
ECMAScript has a few <DFN>localisation</DFN> features. The various
<ICODE>toString()</ICODE> methods are all implementation dependent,
but tend to use either UK or US settings (not necessarily correctly).
ECMAScript Ed. 3 introduced some capabilities, including the
<ICODE>toLocaleString()</ICODE>method which should create a string
based on the host's locale.
</P>
<P>
ECMAScript 5th Edition introduces limited ISO 8601 capabilities with
<ICODE>Date.prototype.toISOString()</ICODE> and new behavior for <ICODE>Date.parse()</ICODE>.
</P>
</CONTENT>
<CONTENT TITLE="What does the future hold for ECMAScript?" ID="futureEcmaScript" NUMID="2_12">
<P>
The 5th edition of ECMAScript was approved on 2009-12-04. There is some
support in implementations released before approval date (JScript 5.8,
JavaScript 1.8, JavaScriptCore).
http://www.ecma-international.org/publications/standards/Ecma-262.htm
</P>
<MOREINFO>
<URL>http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Javascript Resources" ID="ecmascriptResources" NUMID="3">
<CONTENT TITLE="What books are recommended for javascript?" ID="books" NUMID="3_1">
<P>
Most javascript books have been found to contain so many technical
errors that consensus recommendations have not emerged from the group.
</P>
<P>
The following books have been considered to have value by some
individuals on c.l.js. The reviews of these books are provided:
</P>
<LIST TYPE="UL">
<LI><EM>&quot;JavaScript: The Definitive Guide,&quot;</EM> 5th Edition, by David Flanagan
<UL>
<LI>Published: 2006-08</LI>
<LI>Pages: 1018</LI>
<LI>Errata: <URL>http://oreilly.com/catalog/9780596101992/errata/</URL></LI>
<LI>Discussed in:
<UL>
<LI>
<URL LINKTEXT="FAQ Update 9.85 Dated 2007-08-31"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/7283898f77fd2a66/9252aa024e058dea#c5f145ae807c918e</URL>
</LI>
</UL>
</LI>
</UL>
</LI>
<LI>
<EM>"JavaScript, The Good Parts,"</EM> 1st Edition, by Douglas Crockford
<UL>
<LI>Published: 2008-05</LI>
<LI>Pages: 170</LI>
<LI>Errata: <URL>http://oreilly.com/catalog/9780596517748/errata/</URL></LI>
<LI>Discussed in:
<UL>
<LI>
<URL LINKTEXT="Crockford's 'The Good Parts': a short review"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/d084d2109f7b4ec7#</URL>
</LI>
<LI>
<URL LINKTEXT="FunctionExpression's and memory consumptions"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/db1e49ab113aa05c/3987eac87ad27966#3987eac87ad27966</URL>
</LI>
<LI>
<URL LINKTEXT="FAQ Topic - What books are recommended for javascript? (2008-12-02)"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/6a41f7835ee728de/da5ccfc65e2df64a#da5ccfc65e2df64a</URL>
</LI>
<LI>
<URL LINKTEXT="Augmenting functions"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/3a08fb741525ab6d/</URL>
</LI>
<LI>
<URL LINKTEXT="Crockford's JavaScript, The Good Parts (a book review)."
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/bf26be6e63494ee2/acb733a1c35f6ce5#ee9e4ee29e658d5d</URL>
</LI>
<LI>
<URL LINKTEXT="Closures Explained"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/df602506ee48b400/e65e00f5cad07676#e65e00f5cad07676</URL>
</LI>
<LI>
<URL LINKTEXT="Javascript library development"
>http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/acadf1b22b219433/4f69a95607d0b3ae#4f69a95607d0b3ae</URL>
</LI>
</UL></LI>
</UL>
</LI>
</LIST>
</CONTENT>
<CONTENT TITLE="What online resources are available?" ID="onlineResources" NUMID="3_2">
<LIST TITLE="ECMAScript" TYPE="DL" ID="ecmaResources">
<DT>The Official ECMAScript Specification</DT>
<DD><URL>[ECMA-262] http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm</URL></DD>
 
<DT>[ISO16262] ISO/IEC 16262, Second Edition 2002-06-01 : ISO Standard matching
ECMA-262 3rd Edition, with corrections.</DT>
<DD><URL>http://standards.iso.org/ittf/PubliclyAvailableStandards/c033835_ISO_IEC_16262_2002(E).zip</URL></DD>
<DT>[MS-ES3]: Internet Explorer ECMA-262 ECMAScript Language Specification Standards Support</DT>
<DD><URL>http://msdn.microsoft.com/en-us/library/ff520996%28VS.85%29.aspx</URL></DD>
<DD><URL>res/%5BMS-ES3%5D.pdf</URL> (local alias)</DD>
<DT>[MS-ES3EX]: Microsoft JScript Extensions to the ECMAScript Language Specification Third Edition</DT>
<DD><URL>http://msdn.microsoft.com/en-us/library/ff521046%28VS.85%29.aspx</URL></DD>
<DD><URL>res/%5BMS-ES3EX%5D.pdf</URL> (local alias)</DD>
<DT>ECMAScript on Wikipedia</DT>
<DD><URL>http://en.wikipedia.org/wiki/ECMAScript</URL></DD>
</LIST>
<LIST TITLE="W3C DOM" TYPE="DL" ID="domResources">
<DT>DOM Level 1 ECMAScript Binding</DT>
<DD><URL>http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html</URL></DD>
<DT>DOM Level 2 ECMAScript Binding</DT>
<DD><URL>http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html</URL></DD>
<DT>DOM Level 2 Events</DT>
<DD><URL>http://www.w3.org/TR/DOM-Level-2-Events/events.html</URL></DD>
<DT>DOM Level 2 Style</DT>
<DD><URL>http://www.w3.org/TR/DOM-Level-2-Style/</URL></DD>
<DT>DOM Level 3 ECMAScript Binding</DT>
<DD><URL>http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html</URL></DD>
</LIST>
 
<LIST TITLE="Browser Documentation" TYPE="DL" ID="browserResources">
<DT>Mozilla</DT>
<DD>JavaScript: <URL>http://developer.mozilla.org/en/docs/JavaScript</URL></DD>
<DD>Gecko DOM Reference: <URL>http://developer.mozilla.org/en/docs/Gecko_DOM_Reference</URL></DD>
<DT>Microsoft</DT>
<DD>HTML and DHTML Reference: <URL>http://msdn.microsoft.com/en-us/library/ms533050.aspx</URL></DD>
<DD>JScript Language Reference:<URL>http://msdn.microsoft.com/en-us/library/hbxc2t98%28VS.85%29.aspx</URL></DD>
<DD>Scripting: <URL>http://msdn.microsoft.com/en-us/library/ms950396.aspx</URL></DD>
<DT>Opera</DT>
<DD>Web Specifications Support: <URL>http://www.opera.com/docs/specs/#ecmascript</URL></DD>
<DD>JavaScript Support: <URL>http://www.opera.com/docs/specs/js/</URL></DD>
<DD>ECMAScript Support: <URL>http://www.opera.com/docs/specs/js/ecma</URL></DD>
<DT>BlackBerry JavaScript Reference</DT>
<DD><URL>http://docs.blackberry.com/en/developers/deliverables/11849/</URL></DD>
 
<DT>ICab InScript</DT>
<DD><URL>http://www.muchsoft.com/inscript/</URL></DD>
 
<DT>Apple Safari</DT>
<DD>Web Content Guide: <URL>http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html</URL></DD>
<DT>Webkit</DT>
<DD>Project Site: <URL>http://webkit.org/</URL></DD>
<DD>Wiki: <URL>http://trac.webkit.org/wiki</URL></DD>
<DD>DOM Reference: <URL>http://developer.apple.com/Mac/library/documentation/AppleApplications/Reference/WebKitDOMRef/index.html#//apple_ref/doc/uid/TP40006089</URL></DD>
 
<DT>Netscape 4 Client-Side JavaScript Reference</DT>
<DD><URL>http://docs.sun.com/source/816-6408-10/</URL></DD>
<DT>Archived documentation for MSIE 3.x</DT>
<DD><URL>http://members.tripod.com/%7Ehousten/download/</URL></DD>
</LIST>
<LIST TITLE="Standalone ECMAScript Implementations" TYPE="DL" ID="standaloneImplementations">
<DT>Rhino: An open-source implementation of JavaScript written in Java</DT>
<DD><URL>http://www.mozilla.org/rhino/</URL></DD>
<DT>Besen IDE: ECMAScript Edition 5 with IDE</DT>
<DD><URL>http://besen.sourceforge.net/</URL></DD>
<DT>V8: Google's open source JavaScript engine</DT>
<DD><URL>http://code.google.com/p/v8/</URL></DD>
<DT>SpiderMonkey: Mozilla's C implementation of JavaScript</DT>
<DD><URL>http://www.mozilla.org/js/spidermonkey/</URL></DD>
<DT>Digital Mars DMD Script, console and MS Active Script implementation of ECMAScript</DT>
<DD><URL>http://www.digitalmars.com/dscript/</URL></DD>
</LIST>
<LIST TITLE="Other ECMAScript Implementations" TYPE="DL" ID="nonBrowserResources">
<DT>Developing Dashboard Widgets: Apple Developer Connection</DT>
<DD><URL>http://developer.apple.com/macosx/dashboard.html</URL></DD>
<DT>Whitebeam Apache Module: Server Side JavaScript in Apache</DT>
<DD><URL>http://www.whitebeam.org/</URL></DD>
</LIST>
</CONTENT>
<CONTENT TITLE="Javascript Libraries" ID="libraryResources">
<P>
No javascript libraries are endorsed by this group. If you want help
with using a library, visit that library's discussion group instead.
</P>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Functions" ID="functions">
<CONTENT TITLE="What is (function(){ /*...*/ })() ?" ID="scope">
<P>
This is an anonymous <DFN>FunctionExpression</DFN> that is called
immediately after creation.
</P>
<P>
Variables declared inside a function are not accessible from
outside the function. This can be useful, for example, to hide
implementation details or to avoid polluting the global scope.
</P>
<MOREINFO>
<URL>http://yura.thinkweb2.com/named-function-expressions/</URL>
<URL>notes/closures/</URL>
<URL>http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/#question-about-surrounding-parentheses</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="What is a function statement?" ID="functionStatement">
<P>
The term <DFN>function statement</DFN> has been widely and wrongly used to
describe a <ICODE>FunctionDeclaration</ICODE>. This is misleading because in ECMAScript,
a <ICODE>FunctionDeclaration</ICODE> is not a <DFN>Statement</DFN>; there are places in a program
where a <DFN>Statement</DFN> is permitted but a <ICODE>FunctionDeclaration</ICODE> is not. To add
to this confusion, some implementations, notably Mozillas', provide a
syntax extension called <DFN>function statement</DFN>. This is allowed under
section 16 of ECMA-262, Editions 3 and 5.
</P>
<P>
Example of nonstandard <DFN>function statement</DFN>:
</P>
<CODE>
// Nonstandard syntax, found in GMail source code. DO NOT USE.
try {
// FunctionDeclaration not allowed in Block.
function Fze(b,a){return b.unselectable=a}
/*...*/
} catch(e) { _DumpException(e) }
</CODE>
<P>
Code that uses <DFN>function statement</DFN> has three known interpretations. Some
implementations process <ICODE>Fze</ICODE> as a <DFN>Statement</DFN>, in order. Others, including
JScript, evaluate <ICODE>Fze</ICODE> upon entering the execution context that it
appears in. Yet others, notably DMDScript and default configuration of BESEN,
throw a <ICODE>SyntaxError</ICODE>.
</P>
<P>
For consistent behavior across implementations, <EM>do not use function
statement</EM>; use either <ICODE>FunctionExpression</ICODE> or <ICODE>FunctionDeclaration</ICODE> instead.
</P>
<P>
Example of <ICODE>FunctionExpression</ICODE> (valid):
</P>
<CODE>
var Fze;
try {
Fze = function(b,a){return b.unselectable=a};
/*...*/
} catch(e) { _DumpException(e) }
</CODE>
Example of <ICODE>FunctionDeclaration</ICODE> (valid):
<CODE>
// Program code
function aa(b,a){return b.unselectable=a}
</CODE>
<!--
Notable examples of the misuse of the term "function statement"
can be seen in David Flanagan's "JavaScript: The Definitive Guide",
Douglas Crockford's "JavaScript: The Good Parts", MDC documentation,
JSLint error messages.
-->
<MOREINFO>
<URL>example/functionStatement.html</URL>
<URL>https://mail.mozilla.org/pipermail/es-discuss/2008-February/005314.html</URL>
<URL>http://groups.google.com/group/comp.lang.javascript/msg/aa9a32d0c6ae0342</URL>
<URL>http://groups.google.com/group/comp.lang.javascript/msg/3987eac87ad27966</URL>
<URL>http://nanto.asablo.jp/blog/2005/12/10/172622</URL> (Article in Japanese)
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Dates" ID="dates">
<P>
ISO 8601 defines date and time formats. Some benefits include:
</P>
<LIST TYPE="UL">
<LI>language-independent and unambiguous world-wide</LI>
<LI>sortable with a trivial string comparison</LI>
<LI>easily readable and writable by software</LI>
<LI>compatible with standards ISO 9075 and <URL LINKTEXT="rfc 3339">http://www.ietf.org/rfc/rfc3339.txt</URL></LI>
</LIST>
<P>
The ISO Extended format for common date is <ICODE>YYYY-MM-DD</ICODE>, and for time is
<ICODE>hh:mm:ss</ICODE>.
</P>
<P>
For an event with an offset from UTC, use <ICODE>YYYY-MM-DDThh:mm:ss&#177;hh:mm</ICODE>.
</P>
<P>
Never use a local date/time format for a non-local event. Instead, use
UTC, as in <ICODE>YYYY-MM-DDThh:mm:ssZ</ICODE> (<ICODE>Z</ICODE> is the only letter suffix).
</P>
<P>
The <ICODE>T</ICODE> can be omitted where that would not cause ambiguity. For
rfc 3339 compliance, it may be replaced by a space and for SQL,
it <EM>must</EM> be replaced by a single space.
</P>
<P>
Year <ICODE>0000</ICODE> is unrecognized by some formats (XML Schema, <ICODE>xs:date</ICODE>).
</P>
<MOREINFO>
<URL LINKTEXT="ECMA-262 Date.prototype, s. 15.9">#onlineResources</URL>
<URL LINKTEXT="A summary of the international standard date and time notation, by Markus Kuhn"
>http://www.cl.cam.ac.uk/~mgk25/iso-time.html</URL>
<URL>http://en.wikipedia.org/wiki/ISO_8601</URL>
<URL LINKTEXT="ISO 8601:2004(E)">res/ISO_8601-2004_E.pdf</URL>
<URL LINKTEXT="W3C QA Tip: Use international date format (ISO)">http://www.w3.org/QA/Tips/iso-date</URL>
<URL LINKTEXT="RFC 3339, Date and Time on the Internet: Timestamps"
>http://www.ietf.org/rfc/rfc3339.txt</URL>
<URL>http://www.w3.org/TR/xmlschema-2/#dateTime</URL>
</MOREINFO>
 
<CONTENT TITLE="How do I format a Date object with javascript?" ID="formatDate" NUMID="4_30">
<P>
A local <ICODE>Date</ICODE> object where <ICODE>0 &lt;= year &lt;= 9999</ICODE> can be
formatted to a common ISO 8601 format <ICODE>YYYY-MM-DD</ICODE> with:-
</P>
<CODE>
/** Formats a Date to YYYY-MM-DD (local time), compatible with both
* ISO 8601 and ISO/IEC 9075-2:2003 (E) (SQL 'date' type).
* @param {Date} dateInRange year 0000 to 9999.
* @throws {RangeError} if the year is not in range
*/
function formatDate(dateInRange) {
var year = dateInRange.getFullYear(),
isInRange = year &gt;= 0 &amp;&amp; year &lt;= 9999, yyyy, mm, dd;
if(!isInRange) {
throw RangeError("formatDate: year must be 0000-9999");
}
yyyy = ("000" + year).slice(-4);
mm = ("0" + (dateInRange.getMonth() + 1)).slice(-2);
dd = ("0" + (dateInRange.getDate())).slice(-2);
return yyyy + "-" + mm + "-" + dd;
}
</CODE>
<MOREINFO>
<URL>http://www.merlyn.demon.co.uk/js-date9.htm</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How can I create a Date object from a String?" ID="parseDate">
<P>
An Extended ISO 8601 local Date format <ICODE>YYYY-MM-DD</ICODE> can be parsed to a
Date with the following:
</P>
<CODE>
/**Parses string formatted as YYYY-MM-DD to a Date object.
* If the supplied string does not match the format, an
* invalid Date (value NaN) is returned.
* @param {string} dateStringInRange format YYYY-MM-DD, with year in
* range of 0000-9999, inclusive.
* @return {Date} Date object representing the string.
*/
function parseISO8601(dateStringInRange) {
var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
 
if(parts) {
month = +parts[2];
date.setFullYear(parts[1], month - 1, parts[3]);
if(month != date.getMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}</CODE>
</CONTENT>
</CONTENT>
 
<CONTENT TITLE="Numbers" ID="numbers">
<CONTENT TITLE="How do I format a Number as a String with exactly 2 decimal places?" ID="formatNumber" NUMID="4_6">
<P>
When formatting money for example, to format 6.57634 to 6.58, 6.7 to
6.50, and 6 to 6.00?
</P>
<P>
Rounding of x.xx5 is unreliable, as most numbers are not represented
exactly. See also:
<URL LINKTEXT="Why does simple decimal arithmetic give strange results?">#binaryNumbers</URL>
</P>
<P>
The statement <ICODE>n = Math.round(n * 100)/100</ICODE> converts <ICODE>n</ICODE> to a <ICODE>Number</ICODE> value
close to a multiple of <ICODE>0.01</ICODE>. However, there are some problems.
Converting the number to a string <ICODE>(n + "")</ICODE>, does not give
trailing zeroes. Rounding numbers that are very close to <ICODE>x.5</ICODE>, for example,
<ICODE>Math.round(0.49999999999999992)</ICODE> results <ICODE>1</ICODE>.
</P>
<P>
ECMA-262 3rd Edition introduced <ICODE>Number.prototype.toFixed</ICODE>.
There are bugs in JScript 5.8 and below with certain numbers, for example
<ICODE>0.007.toFixed(2)</ICODE> incorrectly results <ICODE>0.00</ICODE>.
</P>
<CODE>
var numberToFixed =
(function() {
return toFixedString;
function toFixedString(n, digits) {
var unsigned = toUnsignedString(Math.abs(n), digits);
return (n &lt; 0 ? "-" : "") + unsigned;
}
function toUnsignedString(m, digits) {
var t, s = Math.round(m * Math.pow(10, digits)) + "",
start, end;
if (/\D/.test(s)) {
return "" + m;
}
s = padLeft(s, 1 + digits, "0");
start = s.substring(0, t = (s.length - digits));
end = s.substring(t);
if(end) {
end = "." + end;
}
return start + end; // avoid "0."
}
/**
* @param {string} input: input value converted to string.
* @param {number} size: desired length of output.
* @param {string} ch: single character to prefix to s.
*/
function padLeft(input, size, ch) {
var s = input + "";
while(s.length &lt; size) {
s = ch + s;
}
return s;
}
})();
 
// Test results
document.writeln([
"numberToFixed(9e-3, 12) =&gt; " + numberToFixed(9e-3, 12),
"numberToFixed(1.255, 2) =&gt; " + numberToFixed(1.255, 2),
"numberToFixed(1.355, 2) =&gt; " + numberToFixed(1.355, 2),
"numberToFixed(0.1255, 3) =&gt; " + numberToFixed(0.1255, 3),
"numberToFixed(0.07, 2) =&gt; " + numberToFixed(0.07, 2),
"numberToFixed(0.0000000006, 1) =&gt; " + numberToFixed(0.0000000006, 1),
"numberToFixed(0.0000000006, 0) =&gt; " + numberToFixed(0.0000000006, 0)
].join("\n"));
</CODE>
<MOREINFO>
<URL>http://www.merlyn.demon.co.uk/js-round.htm</URL>
<URL>http://msdn.microsoft.com/en-us/library/sstyff0z%28VS.85%29.aspx</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Why does simple decimal arithmetic give strange results?" ID="binaryNumbers" NUMID="4_7">
<P>
For example, <ICODE>5 * 1.015</ICODE> does not give exactly
<ICODE>5.075</ICODE> and <ICODE>0.06+0.01</ICODE> does
not give exactly <ICODE>0.07</ICODE> in javascript.
</P>
<P>
ECMAScript numbers are represented in binary as IEEE-754 (IEC 559)
Doubles, with a resolution of 53 bits, giving an accuracy of
15-16 decimal digits; integers up to just over <ICODE>9e15</ICODE> are
precise, but few decimal fractions are. Given this, arithmetic
is as exact as possible, but no more. Operations on integers
are exact if the true result and all intermediates are integers
within that range.
</P>
<P>
In particular, non-integer results should not normally be
compared for equality; and non-integer computed results
commonly need rounding; see <URL
LINKTEXT="How do I format a Number as a String with exactly 2 decimal places?"
>#formatNumber</URL>
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/7wkd9z69%28VS.85%29.aspx</URL>
<URL>http://www.merlyn.demon.co.uk/js-misc0.htm#DW4</URL>
</MOREINFO>
<P>
Otherwise, use <ICODE>Math.round</ICODE> on the results of expressions which
should be of integer value.
</P>
</CONTENT>
<CONTENT TITLE="Why does K = parseInt('09') set K to 0?" ID="parseIntBase" NUMID="4_12">
<P>
Method <ICODE>parseInt</ICODE> generally needs a second parameter, <ICODE>radix</ICODE>,
for the base (from 2 to 36).
</P>
<P>
If <ICODE>radix</ICODE> is omitted, the base is determined by the contents of
the string. Any string beginning with <ICODE>'0x'</ICODE> or <ICODE>'0X'</ICODE> represents a
hexadecimal number. A string beginning with a leading 0 may be parsed as
octal (as if <ICODE>raxix</ICODE> were 8), in ECMA-262 Ed 3 (octal digits are <ICODE>0-7</ICODE>).
If string <ICODE>'09'</ICODE> is converted to <ICODE>0</ICODE>.
</P>
<P>
To force use of a particular base, use the <ICODE>radix</ICODE>
parameter: <ICODE>parseInt("09", base)</ICODE>.
<!-- [omit]
If base 10 is desired,
the unary <ICODE>+</ICODE> operator can be an option. Example:
<ICODE>
var s = '-09.1'; // Input string.
var j = +s; // Convert to number. Result: -9.1
var n = j|0; // Chop off decimal (convert ToInt32). Result: -9
</ICODE>
[/omit] -->
</P>
<MOREINFO>
<URL>http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/parseInt</URL>
<URL>http://msdn.microsoft.com/en-us/library/x53yedee%28VS.85%29.aspx</URL>
<URL>http://docs.sun.com/source/816-6408-10/toplev.htm#1064173</URL>
<URL>notes/type-conversion/#tcPrIntRx</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Why does 1+1 equal 11? or How do I convert a string to a number?" ID="typeConvert">
<P>
Variables are not typed; their values are. The conversion between a
string and a number happens automatically.
</P>
<P>
The addition operator (<ICODE>+</ICODE>) performs concatenation if either operand is a
string, thus <ICODE>"1" + 1</ICODE> results <ICODE>"11"</ICODE>. To perform addition, you might need
to first convert the string to a number. For example <ICODE>+varname</ICODE> or
<ICODE>Number(varname)</ICODE> or <ICODE>parseInt(varname, 10)</ICODE> or
<ICODE>parseFloat(varname)</ICODE>. Form control values are strings, as is the result
from a <ICODE>prompt</ICODE> dialog. Convert these to numbers before performing
addition: <ICODE>+'1' + 1</ICODE> results <ICODE>2</ICODE>.
</P>
<MOREINFO>
<URL LINKTEXT="Additional Notes">notes/type-conversion/</URL>
<URL>http://msdn.microsoft.com/en-us/library/67defydd%28VS.85%29.aspx</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I generate a random integer from 1 to n?" ID="randomNumber" NUMID="4_22">
<P>
<ICODE>Math.random()</ICODE> returns a value <ICODE>R</ICODE> such that <ICODE>0 &lt;= R &lt; 1.0</ICODE>; therefore:
</P>
<CODE>
// positive integer expected
function getRandomNumber(n) {
return Math.floor(n * Math.random());
}
</CODE>
- gives an evenly distributed random integer in the range from
<ICODE>0</ICODE> to <ICODE>n - 1</ICODE> inclusive; use <ICODE>getRandomNumber(n)+1</ICODE> for <ICODE>1</ICODE> to <ICODE>n</ICODE>.
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/41336409%28VS.85%29.aspx</URL>
<URL>http://docs.sun.com/source/816-6408-10/math.htm</URL>
How to Deal and Shuffle, see in: <URL>http://www.merlyn.demon.co.uk/js-randm.htm</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Objects" ID="objects">
<CONTENT TITLE="What is a native object?" ID="nativeObject">
<P>
A <DFN>native object</DFN> is any object whose semantics are fully defined by
ECMA-262.
</P>
<P>
Some <DFN>native objects</DFN> are <DFN>built-in</DFN>; others, such as <DFN>user-defined</DFN> objects,
may be constructed during the execution of an ECMAScript program.
</P>
<P>
Example:
</P>
<CODE>
// Native built-in objects:
var m = Math, // Built-in Math object.
slice = Array.prototype.slice, // Built-in native method.
o = {}, // Native user-defined object.
f = function(){}, // Native user-defined function.
d = new Date(),
a = [],
e = new Error("My Message.");
</CODE>
See also:
<MOREINFO>
<URL>http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="What is a built-in object?" ID="builtInObject">
<P>
A <DFN>built-in</DFN> object is any object supplied by an ECMAScript
implementation, independent of the host environment, that is present
at the start of the execution of an ECMAScript program.
</P>
<P>
ECMA-262 3rd Edition defines the following <DFN>built-in</DFN> objects:
</P>
<LIST TYPE="DL" ID="builtInsList">
<DT>Objects</DT>
<DD><EM>global</EM>, Math</DD>
<DT>Constructors</DT>
<DD>Object, Function, Array, String, Boolean, Number, Date, RegExp</DD>
 
<DT>Errors</DT>
<DD>Error, Date, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError</DD>
<DT>Functions</DT>
<DD>eval, parseInt, parseFloat, isNaN, isFinite, decodeURI,
decodeURIComponent, encodeURI, encodeURIComponent</DD>
</LIST>
<P>
ECMA-262 Edition 5 defines also the built-in object <ICODE>JSON</ICODE>.
</P>
<P>
Nonstandard <DFN>built-in</DFN> objects may include <ICODE>RuntimeObject</ICODE>,
<ICODE>String.prototype.link</ICODE>, <ICODE>CollectGarbage</ICODE>, and more.
</P>
</CONTENT>
 
<CONTENT TITLE="What is a host object?" ID="hostObject" NUMID="2_8">
<P>
A <DFN>host object</DFN> is any object supplied by the host environment to
complete the execution environment of ECMAScript.
</P>
<P>
A <DFN>host object</DFN> is not part of the ECMAScript implementation, but is
exposed to the ECMAScript implementation.
</P>
<P>
A <DFN>host object</DFN> may be implemented as a native ECMAScript object, however
this is not required. For example, Internet Explorer implements many
scriptable DOM objects as ActiveX Objects, often resulting in unexpected errors.
</P>
<P>
Availability and behavior of a host object depends on the host environment.
</P>
<P>
For example, in a browser, <ICODE>XMLHttpRequest</ICODE> might be available, with or
without standard or proprietary features or events. Windows Script Host object model
has the <ICODE>WScript</ICODE> object available.
</P>
<P>
For information on a particular host object, consult the pertinent
documentation available for the implementation(s). For web browsers,
this usually includes the w3c specifications as well as documentation
for that browser.
See also:
</P>
 
<MOREINFO>
<URL>notes/code-guidelines/#hostObjects</URL>
<URL>http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="When should I use eval?" ID="eval" NUMID="4_40">
<P>
The <ICODE>eval</ICODE> function should <EM>only</EM> be used when it is necessary to
evaluate a string supplied or composed at run-time; the string
can be anything from a simple (but unpredictable) expression such
as <ICODE>"12 * 2.54"</ICODE> to a substantial piece of javascript code.
</P>
<P>
When <ICODE>eval( '{"key" : 42}' )</ICODE> is called, <ICODE>{</ICODE> is interpreted as a block of
code instead of an object literal. Hence, the Grouping Operator (parentheses)
is used to force <ICODE>eval</ICODE> to interpret the JSON as an object literal:
<ICODE>eval( '({"key" : 42})' );</ICODE>.
</P>
<MOREINFO>
<URL>http://json.org/</URL>
<URL LINKTEXT="How do I access a property of an object using a string?"
>#propertyAccessAgain</URL>
<URL>notes/square-brackets/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I access a property of an object using a string?" ID="propertyAccessAgain" NUMID="4_39">
<P>
There are two ways to access properties: dot notation and square bracket
notation. What you are looking for is the square bracket notation in
which the dot, and the identifier to its right, are replaced with a set
of square brackets containing a string. The value of the string matches
the identifier. For example:-
</P>
<CODE>
//dot notation
var bodyElement = document.body;
 
//square bracket notation, using an expression
var bodyElement = document[&quot;bo&quot;+&quot;dy&quot;];</CODE>
<MOREINFO>
<URL>notes/square-brackets/</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Strings and RegExp" ID="strings">
<CONTENT TITLE="How do I trim whitespace?" ID="trimString" NUMID="4_16">
<P>
ECMAScript 5 defines <ICODE>String.prototype.trim</ICODE>. Where not supported,
it can be added as a function that uses a <DFN>regular expression</DFN>:
</P>
<CODE>
if(!String.prototype.trim) {
String.prototype.trim = function() {
return String(this).replace(/^\s+|\s+$/g, "");
};
}
</CODE>
<P>
Implementations are inconsistent with <ICODE>\s</ICODE>. For example,
some implementations, notably JScript 5.8 and Safari 2, do not match <ICODE>\xA0</ICODE>
(no-break space), among others.</P>
<P>
A more consistent approach would be to create a character class
that defines the characters to trim.
</P>
<MOREINFO>
<URL>https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp</URL>
<URL>http://thinkweb2.com/projects/prototype/whitespace-deviations/</URL>
<URL>https://developer.mozilla.org/en/Firefox_3.1_for_developers</URL>
<URL>http://docs.sun.com/source/816-6408-10/regexp.htm</URL>
<URL>http://msdn.microsoft.com/en-us/library/6wzad2b2%28VS.85%29.aspx</URL>
<URL>http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/c7010139217600c3/31092c5eb99625d0?#31092c5eb99625d0</URL>
<URL>http://unicode.org/Public/UNIDATA/PropList.txt</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="DOM and Forms" ID="domRef">
<CONTENT TITLE="How do I get the value of a form control?"
ID="formControlAccess" NUMID="4_13">
<P>
In HTML documents, a form may be referred to as a property of the
<ICODE>document.forms</ICODE> collection, either by its ordinal index or by name
(if the <ICODE>form</ICODE> has a name). A <ICODE>form</ICODE>'s controls may be similarly referenced
from its <ICODE>elements</ICODE> collection:
</P>
<CODE>
var frm = document.forms[0];
var control = frm.elements[&quot;elementname&quot;];
</CODE>
<P>
Once a reference to a control is obtained, its (string) <ICODE>value</ICODE>
property can be read:-
</P>
<CODE>
var value = control.value;
value = +control.value; //string to number.
</CODE>
Some exceptions would be:
<P>
First Exception: Where the control is a <ICODE>SELECT</ICODE> element, and
support for older browsers, such as NN4, is required:
</P>
<CODE>
var value = control.options[control.selectedIndex].value;
</CODE>
<P>
Second Exception: Where several controls share the same name,
such as radio buttons. These are made available as collections
and require additional handling. For more information, see:-
</P>
<MOREINFO>
<URL>notes/form-access/</URL>
<URL LINKTEXT="Unsafe Names for HTML Form Controls">names/</URL>
</MOREINFO>
<P>
Third Exception: File inputs. Most current browsers do not allow
reading of <ICODE>type="file"</ICODE> input elements in a way that is useful.
</P>
</CONTENT>
<CONTENT TITLE="My element is named myselect[], how do I access it?" ID="propertyAccess" NUMID="4_25">
<P>
Form controls with any &quot;illegal&quot; characters can be accessed with
<ICODE>formref.elements[&quot;myselect[]&quot;]</ICODE> - The bracket characters,
amongst others, are illegal in ID attributes and javascript
identifiers, so you should try to avoid them as browsers may
handle them incorrectly.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms537449%28VS.85%29.aspx</URL>
<URL>https://developer.mozilla.org/en/DOM/form</URL>
<URL>notes/form-access/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Why doesn't the global variable &quot;divId&quot; always refer to the element with id=&quot;divId&quot;?"
ID="globalPollution" NUMID="4_41">
<P>
Microsoft introduced a shortcut that can be used to reference
elements which include an <ICODE>id</ICODE> attribute where the
<ICODE>id</ICODE> becomes a globally-accessible property. Some browsers reproduce
this behavior. Some, most notably Gecko-based browsers (Netscape and Mozilla),
do so only in "quirks" mode. The best approach is the <ICODE>document.getElementById</ICODE>
method, which is part of the W3C DOM standard and implemented
in modern browsers (including IE from version 5.0). So an
element with <ICODE>id=&quot;foo&quot;</ICODE> can be referenced
with:-
</P>
<CODE>
var el = document.getElementById(&quot;foo&quot;);
</CODE>
<P>
Note: make sure not to use the same <ICODE>id</ICODE> twice in the same document
and do not give an element a <ICODE>name</ICODE> that matches an <ICODE>id</ICODE>
of another in the same document or it will trigger bugs in MSIE &lt;= 7 with
<ICODE>document.getElementsByName</ICODE> and <ICODE>document.getElementById</ICODE>.
</P>
<MOREINFO>
<URL>https://developer.mozilla.org/en/Using_Web_Standards_in_your_Web_Pages/Using_the_W3C_DOM#Accessing_Elements_with_the_W3C_DOM</URL>
<URL>faq_notes/faq_notes.html#FAQN4_41</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I modify the content of the current page?"
ID="updateContent" NUMID="4_15">
<P>
Using the non-standard but widely implemented
<ICODE>innerHTML</ICODE> property:
<ICODE>&lt;div id=&quot;anID&quot;&gt;Some Content&lt;/div&gt;</ICODE> with script:
</P>
<CODE>
document.getElementById(&quot;anID&quot;).innerHTML =
&quot;Some &lt;em&gt;new&lt;/em&gt; Content&quot;;
</CODE>
<P>
Where <ICODE>&quot;anID&quot;</ICODE> is the (unique on the HTML page)
<ICODE>id</ICODE> attribute value of the element to modify.
</P>
<P>
All versions of Internet Explorer exhibit problems with innerHTML, including:
</P>
<LIST TYPE="UL">
<LI>Fails with FRAMESET, HEAD, HTML, STYLE, SELECT,
OBJECT, and all TABLE-related elements.</LI>
<LI>Replaces consecutive whitespace characters with a single space.</LI>
<LI>Changes attribute values and order of appearance.</LI>
<LI>Removes quotations around attribute values.</LI>
</LIST>
<P>
If the new content is only text and does not need to replace existing HTML,
it is more efficient to modify the <ICODE>data</ICODE> property of a text node.
</P>
<CODE>
document.getElementById(&quot;anID&quot;).firstChild.data = &quot;Some new Text&quot;;
</CODE>
<P>
Compatibility Note: Implementations have been known to split long text
content among several adjacent text nodes, so replacing the data of the
first text node may not replace all the element's text. The <ICODE>normalize</ICODE>
method, where supported, will combine adjacent text nodes.
</P>
<P>
Note: Make sure the element exists in the document (has been parsed) before trying to
reference it.
</P>
<MOREINFO>
<URL>http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-FF21A306</URL>
<URL>http://msdn.microsoft.com/en-us/library/cc304097%28VS.85%29.aspx</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx</URL>
<URL>http://developer.mozilla.org/en/Whitespace_in_the_DOM</URL>
<URL>http://developer.mozilla.org/en/docs/DOM:element.innerHTML</URL>
<URL>http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#html-fragment-serialization-algorithm</URL> (draft)
</MOREINFO>
</CONTENT>
 
<CONTENT TITLE="Why does my code fail to access an element?" ID="accessElementBeforeDefined">
<P>
An element can only be accessed after it exists in the document.
</P>
<P>
Either:
A) include your script after the HTML element it refers to, or
B) use the <ICODE>"load"</ICODE> event to trigger your script.
</P>
<P>
Example A:
</P>
<CODE>
&lt;div id="snurgle"&gt;here&lt;/div&gt;
&lt;script type="text/javascript"&gt;
// Don't forget var.
var snurgleEl = document.getElementById("snurgle");
window.alert(snurgleEl.parentNode);
&lt;/script&gt;
</CODE>
<P>
Example B:
</P>
<CODE>
// In the HEAD.
&lt;script type="text/javascript"&gt;
window.onload = function(){
var snurgleEl = document.getElementById("snurgle");
};
&lt;/script&gt;
</CODE>
 
<LIST TYPE="UL" TITLE="Other problems can include:">
<LI>invalid HTML</LI>
<LI>two elements with the same <ICODE>name</ICODE> or <ICODE>id</ICODE></LI>
<LI>use of an unsafe name: http://jibbering.com/names/</LI>.
</LIST>
</CONTENT>
<CONTENT TITLE="How can I see in javascript if a web browser accepts cookies?"
ID="testCookie" NUMID="4_4">
<P>
Write a cookie and read it back and check if it's the same.
</P>
<MOREINFO>
Additional Notes:
<URL>http://www.ietf.org/rfc/rfc2965.txt</URL>
<URL>http://www.galasoft-lb.ch/myjavascript/consulting/2001012701/</URL>
<URL>http://www.cookiecentral.com/</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Windows and Frames" ID="windows">
<P>
The <ICODE>window</ICODE> object (also referred to by <ICODE>self</ICODE>) is "DOM Level 0".
No formal standard for it exists.
</P>
<CONTENT TITLE="How can I disable the back button in a web browser?" ID="disableBackButton" NUMID="4_2">
<P>
You can't. The browser's history cannot be modified. However, you
can use <ICODE>self.location.replace(url);</ICODE> in some browsers to replace
the current page in the history.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms536712%28VS.85%29.aspx</URL>
<URL>http://docs.sun.com/source/816-6408-10/location.htm#1194240</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I access a frame's content?"
ID="frameRef" NUMID="4_8">
<P>
To reference another frame on the <EM>same domain</EM>:
</P>
<P>
The <DFN>content window</DFN> of a <ICODE>FRAME</ICODE> or <ICODE>IFRAME</ICODE> can be
accessed by the <ICODE>frames</ICODE> collection.
</P>
<P>
Example:
</P>
<CODE>
var fwin;
fwin = self.frames[0]; // or:
fwin = self.frames["iframeName"];
</CODE>
<P>or, from the <ICODE>IFRAME</ICODE> or <ICODE>FRAME</ICODE> element:</P>
<CODE>
var iframeEl = document.getElementById("myFrame");
var fwin = iframeEl.contentWindow; // Nonstandard, but widely supported.
var fdoc = iframeEl.contentDocument; // DOM2 HTML Standard.
</CODE>
<P>
A global identifier <ICODE>moomin</ICODE> in the the iframe's <DFN>content window</DFN>
is accessed as <ICODE>fwin.moomin</ICODE>.
</P>
<P>
To communicate between frames on <EM>different</EM> domains:
</P>
<P>
Where supported, (IE8, Firefox 3, Opera 9, Safari 4), use
<ICODE>window.postMessage( message[, port], otherDomain);</ICODE>.
</P>
<P>
Example:
<URL>http://jibbering.com/faq/example/postMessage.html</URL>
</P>
<P>
Where <ICODE>window.postMessage</ICODE> is not supported, the <ICODE>window.name</ICODE> property
can be set on the other window, which can poll for updates to that
property using <ICODE>setInterval(checkWinName, 100);</ICODE> where <ICODE>checkWinName</ICODE>
is a function that polls to check the value of
<ICODE>self.name</ICODE>.
</P>
<MOREINFO>
<URL>http://en.wikipedia.org/wiki/Same_origin_policy</URL>
<URL>http://www-archive.mozilla.org/docs/dom/domref/dom_frame_ref5.html</URL>
<URL>https://developer.mozilla.org/en/DOM/window.postMessage</URL>
<URL>http://msdn.microsoft.com/en-us/library/cc197015(VS.85).aspx</URL>
</MOREINFO>
 
</CONTENT>
<CONTENT TITLE="How do I find the size of the window?" ID="getWindowSize"
NUMID="4_9">
<P>
Here is a detailed explanation of a cross-browser strategy to
find the dimensions of the viewport, excepting all chrome
(excludes scrollbars, etc).
</P>
<P>
We can consider various properties:
</P>
<CODE>
window.innerWidth
document.clientWidth
document.documentElement.clientWidth
document.body.clientWidth
</CODE>
<P>
Of the browsers that have an <ICODE>innerWidth</ICODE> property, most
include scrollbar dimensions. Some versions of KHTML browsers
(including Safari 2) do <EM>not</EM> include scrollbar width.
</P>
 
<P>
The <ICODE>window.inner*</ICODE> properties are unreliable and not
useful here. We don't want scrollbar dimensions included.
</P>
<CODE> document.clientWidth</CODE>
<P>
Certain versions of KHTML, including Safari 2, have
<ICODE>document.clientHeight</ICODE> and <ICODE>document.clientWidth</ICODE>
properties. Where supported, these rare properties accurately
return the height and width of the viewport, without including
scrollbar dimensions.
</P>
<CODE>
document.documentElement.clientWidth
document.body.clientWidth
</CODE>
<P>
MSHTML (Trident), Firefox (Gecko), Opera (Presto), and Safari
(Webkit) all support <ICODE>clientHeight</ICODE> on <ICODE>document.body</ICODE>
and <ICODE>document.documentElement</ICODE>. The difficulty is figuring out
which one is reliable. In other words which object to get the
<ICODE>clientHeight</ICODE> property from:<ICODE>documentElement</ICODE> or <ICODE>body</ICODE>?
</P>
 
<P>
What the number returned from either of these properties
represents depends on the environment. The environment includes
the browser, its version, and the rendering mode of the document.
In quirks mode, we'll mostly want to use <ICODE>body.clientHeight</ICODE>
(except for in Safari 2).
</P>
<CODE>document.body.clientHeight</CODE>
<P>
Some environments will return the viewport height. Others will
return <ICODE>0</ICODE>. Yet others will return the <ICODE>clientHeight</ICODE> of
the <ICODE>BODY</ICODE> element.</P>
<CODE> document.documentElement.clientHeight</CODE>
<P>This is the more "standard" property for getting the height of
the viewport. It usually "works" in modern browsers in
<DFN>standards mode</DFN>. Notable exceptions include Safari 2 and
Opera &lt;= 9.25, both of which return the <ICODE>clientHeight</ICODE>
of the <ICODE>html</ICODE> <EM>element</EM>. (Oddly, Opera &lt;= 9.25
in standards mode returns the width of the viewport for
<ICODE>documentElement.clientWidth</ICODE>).
</P>
<P>
With the exception of Safari 2, <ICODE>body.clientHeight</ICODE> is reliable
where <ICODE>documentElement.clientHeight</ICODE> is found to be unreliable.
For example, in Safari 3+, Opera, and Mozilla, all in quirks mode,
<ICODE>document.documentElement.clientHeight</ICODE> returns the <ICODE>clientHeight</ICODE>
of the <ICODE>html</ICODE> element (this may seem unsurprising but
it is not what we want).
</P>
<P>
Conversely, <ICODE>document.body.clientHeight</ICODE> will return
the height of the viewport in most cases where
<ICODE>document.documentElement.clientHeight</ICODE> does not. An exception
to that is Safari 2, where <ICODE>documentElement.clientHeight</ICODE>
and <ICODE>body.clientHeight</ICODE> both return the height of their
corresponding element (not what we want).
</P>
<P>
By using a combination of <DFN>Feature Testing</DFN> and <DFN>Capability Testing</DFN>,
the dimensions of the viewport can be strategically retrieved
from the property that works in the environment the script is
running in. The trick is determining which property will give us
the value we want.
</P>
<P>
Since <ICODE>document.clientHeight</ICODE> is reliable where
(rarely) supported, and since browsers that support this property
don't return the viewport dimensions from
<ICODE>document.body.clientHeight</ICODE> or
<ICODE>document.documentElement.clientHeight</ICODE>, this should be the
very first condition:</P>
 
<CODE>
// Safari 2 uses document.clientWidth (default).
if(typeof document.clientWidth == "number") {
// use document.clientWidth.
}
</CODE>
 
<P>The next strategy is to determine if
<ICODE>document.documentElement.clientHeight</ICODE> property is unreliable.
It is deemed "unreliable" when it is either <ICODE>0</ICODE> or taller
than the viewport.
</P>
<P>
Determining if <ICODE>documentElement.clientHeight</ICODE> is <ICODE>0</ICODE> is easy.
The result is stored in a variable <ICODE>IS_BODY_ACTING_ROOT</ICODE>.
</P>
<CODE>
var docEl = document.documentElement,
IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientHeight === 0;
docEl = null;
</CODE>
 
<P>To determine if <ICODE>documentElement.clientHeight</ICODE> returns
a value taller than the viewport, we need a <DFN>Capability Test.</DFN>
</P>
<P>
If we can force <ICODE>documentElement</ICODE> to be very tall
(taller than a normal viewport) we can then check to see if
<ICODE>documentElement.clientHeight</ICODE> returns that "very tall" number.
If it does, then it is unreliable.
</P>
<P>
We can force <ICODE>documentElement</ICODE> to be taller than the viewport
(or any "normal" viewport) by adding a <ICODE>div</ICODE> to the <ICODE>body</ICODE>,
give that <ICODE>div</ICODE> a height larger than any normal monitor,
and then check to see if <ICODE>documentElement.clientHeight</ICODE> is
that high (or "almost" that high, to account for <ICODE>documentElement</ICODE>
having a border).</P>
 
<CODE>
// Used to feature test Opera returning wrong values
// for documentElement.clientHeight.
// The results of this function should be cached,
// so it does not need to be called more than once.
function isDocumentElementHeightOff(){
var d = document,
div = d.createElement('div');
div.style.height = "2500px";
d.body.insertBefore(div, d.body.firstChild);
var r = d.documentElement.clientHeight &gt; 2400;
d.body.removeChild(div);
return r;
}
</CODE>
 
<P>We can use this function to see if we should use
<ICODE>body.clientHeight</ICODE>, instead. (but only after checking if
<ICODE>document.clientHeight</ICODE> is supported).</P>
 
<CODE>
// Safari 2 uses document.clientWidth (default).
if(typeof document.clientWidth == "number") {
// use document.clientHeight/Width.
}
else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff()) {
// use document.body.clientHeight/Width.
} else {
// use document.documentElement.clientHeight/Width.
}
</CODE>
<P>
The preceding strategy was developed by Garrett Smith with input
from John David Dalton. A complete and tested example can be found
in APE Library under <ICODE>APE.dom.getViewportDimensions</ICODE>.
Source code:
<URL>http://dhtmlkitchen.com/ape/build/dom/viewport-f.js</URL>.
APE is publicly released under Academic Free License.
APE home: <URL>http://dhtmlkitchen.com/ape/</URL>.
</P>
<P>
Note: The dimensions cannot be determined accurately until after
the document has finished loading.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms533566%28VS.85%29.aspx</URL>
<URL>http://developer.mozilla.org/en/DOM/window.innerWidth</URL>
<URL>http://dev.opera.com/articles/view/using-capability-detection/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I check to see if a child window is open, before opening another?"
ID="isWindowOpen" NUMID="4_10">
<CODE>
var myWin;
function openWin(aURL) {
if (!myWin || myWin.closed ) {
myWin = window.open(aURL,'myWin');
} else {
myWin.location.href = aURL;
myWin.focus();
}
}</CODE>
<P>
Popup windows cause usability problems and are generally best avoided.
</P>
<MOREINFO>
<URL>https://developer.mozilla.org/en/DOM:window.open</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms533574%28VS.85%29.aspx</URL>
<URL>http://docs.sun.com/source/816-6408-10/window.htm#1201877</URL>
<URL>http://www.useit.com/alertbox/990530.html</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Why does framename.print() not print the correct frame in IE?"
ID="printFrame" NUMID="4_11">
<P>
IE prints the frame that has focus when you call the print
method <ICODE>frameref.focus();frameref.print();</ICODE>
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms976105.aspx</URL>
</MOREINFO>
</CONTENT>
 
<CONTENT TITLE="How do I close a window and why does it not work on the first one?"
ID="windowClose" NUMID="4_14">
<P>
If a window was opened by javascript, then it can be closed
without confirmation by using <ICODE>windowRef.close()</ICODE>.
</P>
<P>
Before calling <ICODE>windowRef.close()</ICODE> (or other <ICODE>window</ICODE> methods), make
sure the window reference is not null and its <ICODE>closed</ICODE> property is <ICODE>false</ICODE>.
</P>
<P>
Popup windows cause usability problems and are generally best avoided.
</P>
<MOREINFO>
<URL>http://www.useit.com/alertbox/990530.html</URL>
<URL>#isWindowOpen</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms536367%28VS.85%29.aspx</URL>
<URL>https://developer.mozilla.org/en/DOM/window.close#Description</URL>
<URL>http://docs.sun.com/source/816-6408-10/window.htm#1201822</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="Why do I get permission denied when accessing a frame/window?"
ID="permissionDenied" NUMID="4_19">
<P>
In the normal browser security model, a script may only access the
properties of documents served from the same domain or IP address,
protocol, and port.
</P>
<P>
Any attempt to access a property in such cases will result in a &quot;Permission
Denied&quot; error. Signed scripts or trusted ActiveX objects can
overcome this in limited situations.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms533028%28VS.85%29.aspx</URL>
<URL>https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I make a 10 second delay?" ID="setTimeout" NUMID="4_20">
<P>
There is no built-in way to pause execution in javascript such
as a sleep function, but hosts usually provide a method of some
form. Web browsers are designed for event driven programming and
only provide the <ICODE>setTimeout</ICODE> and <ICODE>setInterval</ICODE> functions
to facilitate timed delays. The delay before calling <ICODE>getSnork</ICODE> may
exceed the second parameter to <ICODE>setTimeout</ICODE> and <ICODE>setInterval</ICODE>
due to implementation differences among browsers.
</P>
<P>
To call the function <ICODE>getSnork</ICODE>, approximately 10 seconds
after the function <ICODE>getMoomin()</ICODE> completes, you would do this:
</P>
<CODE>
getMoomin();
setTimeout(getSnork, 10000);
</CODE>
<P>Script execution is not stopped, and adding <ICODE>getSnufkin()</ICODE> after the
<ICODE>setTimeout</ICODE> line would immediately execute the function <ICODE>getSnufkin</ICODE>
before <ICODE>getSnork</ICODE>.
</P>
<P>
Achieving delays through running a loop of some sort for a pre-defined
period is a bad strategy, as that will inhibit whatever was supposed to
be happening during the delay, including blocking user interation.
</P>
<P>
Other (less event driven) hosts have different wait functions,
such as <ICODE>WScript.Sleep()</ICODE> in the Windows Script Host.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms536753%28VS.85%29.aspx</URL>
<URL>http://docs.sun.com/source/816-6408-10/window.htm#1203758</URL>
<URL>http://en.wikipedia.org/wiki/Event-driven_programming</URL>
<URL>faq_notes/misc.html#mtSetTI</URL>
</MOREINFO>
</CONTENT>
 
<CONTENT TITLE="How do I change print settings for window.print()?"
ID="printSettings" NUMID="4_23">
<P>
In a normal security environment, you can't change anything.
</P>
<P>
Print Stylesheet rules provide options.
</P>
<P>For IE, <ICODE>ActiveX</ICODE> or Plugin ScriptX and
Neptune from Meadroid to give you more control for Windows
versions of Internet Explorer, Netscape, and Opera.
</P>
<MOREINFO>
<URL>http://www.meadroid.com/scriptx/</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms976105.aspx</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I change the confirm box to say yes/no or default to cancel?"
ID="changeBrowserDialog" NUMID="4_28">
<P>
The buttons on a confirm box cannot be changed, nor can a default
button be specified.
</P>
<P>
Change the question to a statement so that "OK" is suitable as the
default response.
</P>
<P>
Example:
"Would you like us to charge your credit card?" (wrong)
"We will now charge your credit card." (right).
</P>
</CONTENT>
<CONTENT TITLE="How do I prompt a &quot;Save As&quot; dialog for an accepted mime type?"
ID="fileDownload" NUMID="4_33">
<P>
It is not possible with client-side javascript.
</P>
<P>
Some browsers accept the Content-Disposition header, but this
must be added by the server. Taking the form:-
<ICODE>Content-Disposition: attachment; filename=filename.ext</ICODE>
</P>
<MOREINFO>
<URL>http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html</URL>
<URL>http://support.microsoft.com/kb/q260519/</URL>
</MOREINFO>
</CONTENT>
<!-- Can we remove this entry?
http://groups.google.com/group/comp.lang.javascript/msg/c70b57d86300fa91
CONTENT TITLE="I have window.status=&quot;Moomin&quot;; why doesn't the statusbar change?"
ID="returnValue" NUMID="4_35">
<P>
When changing the status in an event (e.g. <ICODE>onmouseover</ICODE>) you
should return true from the event. Also a number of browsers
require a short delay before setting the status to overcome their
default behaviour with the statusbar.
<ICODE>onevent=&quot;setTimeout('window.status=\'Moomin\'',15);&quot;</ICODE>
</P>
<P>
Many browsers are configured, by default, to disallow scripts from setting
the status bar text. Some browsers don't have such a bar, or don't have it by default.
</P>
</CONTENT-->
<CONTENT TITLE="How do I modify the current browser window?" ID="modifyChrome" NUMID="4_36">
<P>
In a default security environment you are very limited in how much
you can modify the current browser window. You can use
<ICODE>window.resizeTo</ICODE> or <ICODE>window.moveTo</ICODE> to resize or move a
window respectively, but that is it. Normally you can only
suggest chrome changes in a <ICODE>window.open</ICODE>.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/ms536651%28VS.85%29.aspx</URL>
<URL>https://developer.mozilla.org/en/DOM:window.open</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I POST a form to a new window?" ID="target" NUMID="4_37">
<P>
Use the target attribute on the form, opening a window with
that name and your feature string in the onsubmit handler of the
FORM.
</P>
<CODE>
&lt;form action=&quot;&quot; method="post"
target=&quot;wndname&quot; onsubmit=&quot;window.open('',this.target);return true;&quot;&gt;</CODE>
<MOREINFO>
<URL>http://www.htmlhelp.com/reference/html40/forms/form.html</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I open a new window with javascript?" ID="openWindow" NUMID="4_42">
<P>
New windows can be opened on browsers that support the
<ICODE>window.open</ICODE> function and are not subject to the action of any
pop-up blocking mechanism with code such as:-
</P>
<CODE>
var wRef;
if(window.open){
wRef = window.open("http://example.com/page.html","windowName");
}</CODE>
<MOREINFO>
<URL>https://developer.mozilla.org/en/DOM:window.open</URL>
<URL>http://www.infimum.dk/HTML/JSwindows.html</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Ajax and Server Communication" ID="ajaxRef">
<CONTENT TITLE="What is Ajax?" ID="ajax" NUMID="4_44">
<P>
<DFN TITLE="Asynchronous JavaScript and XML">Ajax</DFN>
is shorthand for Asynchronous JavaScript and XML. The technology is
based on the <ICODE>XMLHttpRequest</ICODE> Object. At its simplest,
it is the sending/retrieving of new data from the server without
changing or reloading the window location.
</P>
<MOREINFO>
Mozilla Documentation:
<URL>http://developer.mozilla.org/en/docs/XMLHttpRequest</URL>
MSDN Documention:
<URL>http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms759148%28VS.85%29.aspx</URL>
 
<DFN TITLE="Asynchronous JavaScript and XML">Ajax</DFN>
Libraries and Tutorial Sites:
<URL>http://jibbering.com/2002/4/httprequest.html</URL>
<URL>http://www.ajaxtoolbox.com/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I download a page to a variable?" ID="downloadPage" NUMID="4_38">
<P>
Although <ICODE>XMLHttpRequest</ICODE> can be used to download
entire pages, it is often used for downloading small pieces
of data that can be used to update the current page.
</P>
<MOREINFO>
<URL>http://jibbering.com/2002/4/httprequest.html</URL>
<URL>http://www.ajaxtoolbox.com/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I get a jsp/php variable into client-side javascript?"
ID="getServerVariable" NUMID="4_18">
<P>
Use a server-side language to generate the javascript.
</P>
<P>
Certain characters of ECMAScript strings must be escaped by backslash.
These include quote marks, backslash, and line terminators.
</P>
<P>JSP Example, using Apache Commons: <ICODE>org.apache.commons.lang.StringEscapeUtils</ICODE>:
</P>
<CODE>
var jsVar = "&lt;%= StringEscapeUtils.escapeJavaScript(str) %&gt;";
</CODE>
<P>PHP example using <ICODE>addcslashes</ICODE>: </P>
<CODE>
var jsVar = "&lt;?php echo addcslashes($str,"\\\'\"\n\r"); ?&gt;";
</CODE>
<MOREINFO>
<URL>example/addcslashes.php</URL>
<URL>http://php.net/manual/en/function.addcslashes.php</URL>
<URL>http://commons.apache.org/lang/</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I log-out a user when they leave my site?"
ID="sessionExpired" NUMID="4_29">
<P>
This cannot be done reliably. Here's why:
</P>
<UL>
<LI>
The user may disable javascript so the log-out script will
never execute.
</LI>
<LI>
The user may not be on-line when they close your web page.
</LI>
<LI>
Javascript errors elsewhere in the page may prevent the script
executing.
</LI>
<LI>
The browser may not support the onunload event, or may not fire
it under certain circumstances, so the log-out function will
not execute.
</LI>
</UL>
The URL below has more information.
<MOREINFO>
<URL>http://groups.google.com/groups?selm=BlmZ7.55691%244x4.7344316%40news2-win.server.ntlworld.com</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I run a server side script?" ID="runServerScript" NUMID="4_34">
<P>
You trigger a server-side script by sending an HTTP request.
This can be achieved by setting the <ICODE>src</ICODE> of an <ICODE>img</ICODE>,
<ICODE>Image</ICODE>, <ICODE>frame</ICODE>, or <ICODE>iframe</ICODE>, or by using <DFN
TITLE="XMLHttpRequest or XMLHTTP">XHR</DFN>, where supported.
</P>
<P>
An image will also
&quot;swallow&quot; the data sent back by the server, so that they will
not be visible anywhere.
</P>
<CODE>
var dummyImage = new Image();
dummyImage.src = &quot;scriptURL.asp?param=&quot; + varName;
</CODE>
<P>
Mozilla, Opera 7.6+, Safari 1.2+, and Windows IE 7
provide the <ICODE>XMLHttpRequest</ICODE> object
(Windows IE versions 5+, provides ActiveX to acheive an analagous
effect). <ICODE>XMLHttpRequest</ICODE> can send HTTP requests to
the server, and provides access the <ICODE>responseText</ICODE> or <ICODE>responseXML</ICODE>
(when the response is XML), and HTTP header information.
</P>
<MOREINFO>
<URL>http://jibbering.com/2002/4/httprequest.html</URL>
<URL>http://www.w3.org/TR/XMLHttpRequest/</URL>
<URL>http://developer.mozilla.org/en/XMLHttpRequest</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx</URL>
</MOREINFO>
<CONTENT TITLE="Why are my rollovers so slow?" ID="imageCache" NUMID="4_31">
<P>
Images are cached by the browser depending on the headers sent by
the server. If the server does not send sufficient information
for the browser to decide the image is cacheable, the browser
will check if the image has been updated every time you change the
src of an image (in some user settings). To overcome this you
must send suitable headers.
</P>
<MOREINFO>
<URL>http://www.mnot.net/cache_docs/</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="How do I force a reload from the server/prevent caching?"
ID="noCache" NUMID="4_17">
<P>
To reload a page, use <ICODE>location.reload()</ICODE>. However, this depends
upon the cache headers that your server sends. To change this,
you need to alter the server configuration. A quick fix on the
client is to change the page URI so that it contains a unique
element, such as the current time. For example:
<ICODE>location.replace(location.href+'?d='+new Date().valueOf())</ICODE>
If the <ICODE>location.href</ICODE> already contains a query String, use:
<ICODE>location.replace(location.href+'&amp;d='+new Date().valueOf())</ICODE>
</P>
<MOREINFO>
<URL>http://www.mnot.net/cache_docs/</URL>
<URL>http://docs.sun.com/source/816-6408-10/date.htm</URL>
</MOREINFO>
</CONTENT>
<CONTENT
TITLE="Why is my Ajax page not updated properly when using an HTTP GET request in Internet Explorer?"
ID="ajaxCache" NUMID="4_45">
<P>
Browsers cache the results of HTTP requests to reduce network traffic.
To force the browser to request the document from the server, either
set the <ICODE>EXPIRES</ICODE> and/or <ICODE>CACHE-CONTROL</ICODE> response header(s)
with a past date or use a unique query string.
</P>
<CODE>
req.open("GET", "/example.jsp?date=" + (+new Date), true);
</CODE>
 
Always use the appropriate HTTP method. Do not use <ICODE>POST</ICODE>
to prevent caching. See <URL LINKTEXT="RFC 2616"
>http://www.faqs.org/rfcs/rfc2616.html</URL>.
<MOREINFO>
<URL>http://www.mnot.net/cache_docs/#EXPIRES</URL>
<URL>http://www.mnot.net/javascript/xmlhttprequest/cache.html </URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Debugging" ID="debugging">
<CONTENT TITLE="How do I get my browser to report javascript errors?"
ID="javascriptErrors" NUMID="4_43">
<P>
There are debugging tools for many browsers. Learn to use them all.
</P>
<LIST TYPE="DL">
<DT>Windows</DT>
<DD>
<URL LINKTEXT="Fiddler">http://www.fiddlertool.com/fiddler/</URL>.
Fiddler is an HTTP Debugging proxy (it won't find script
errors). Fiddler logs HTTP activity, like Firebug's Net
tab, but can be attached to any browser running on Windows.
</DD>
<DT>Windows IE</DT>
<DD>Microsoft Script Editor. Included with Visual Studio or Microsoft
Word 2003 (discontinued in Office 2007).
To enable,
<ICODE>Tools</ICODE>, <ICODE>Internet Options</ICODE>, <ICODE>Advanced</ICODE>, and uncheck
<ICODE>Disable Script Debugging</ICODE>. After enabling Script Debugging,
a <ICODE>Script Debugger</ICODE> option will appear in the <ICODE>View</ICODE> menu.</DD>
 
<DD><URL LINKTEXT="IETester">http://www.my-debugbar.com/wiki/IETester/HomePage</URL> for testing IE 5.5- IE8.</DD>
<DD><URL LINKTEXT="CompanionJS">http://www.my-debugbar.com/wiki/CompanionJS/HomePage</URL> <ICODE>console</ICODE> for IE.</DD>
<DD>
<EM>Note:</EM> For debugging scripts in IE, the Microsoft Script <EM>Editor</EM>
is recommended. However, if not available, the <URL LINKTEXT="Microsoft Script Debugger"
>http://www.microsoft.com/downloads/details.aspx?FamilyId=2F465BE0-94FD-4569-B3C4-DFFDF19CCD99&amp;displaylang=en</URL> may be somewhat helpful.
</DD>
<DD>
<URL LINKTEXT="Internet Explorer Developer Toolbar"
>http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en</URL>
</DD>
<DD>
To report errors: Wait until a little yellow
triangle appears at the left end of the status bar, double click
on it and, when the error dialog box appears, check the &quot;Always
show errors&quot; checkbox it contains.
 
Or, <ICODE>Internet Options</ICODE>, <ICODE>Advanced</ICODE>, deselect <ICODE>"Disable Script Debugging"</ICODE>,
select <ICODE>"Display a notification ..."</ICODE>.
</DD>
<DT>Firefox</DT>
<DD>
<ICODE>Tools &gt; Error console</ICODE> (<ICODE>Ctrl</ICODE> + <ICODE>Shift</ICODE> + <ICODE>j</ICODE>).
</DD>
<DD>
<URL LINKTEXT="Firebug">http://getfirebug.com/</URL>
</DD>
<DD>
<URL LINKTEXT="YSlow">https://addons.mozilla.org/en-US/firefox/addon/5369</URL>.
YSlow analyzes web pages and tells you why they're slow
based on Yahoo's rules for high performance web sites.
</DD>
<DD>
<URL LINKTEXT="Lori">https://addons.mozilla.org/en-US/firefox/addon/1743</URL>
<DFN>Lori</DFN> or Life-of-request info, is useful for troubleshooting
server response and page load time.
</DD>
<DD>
<URL LINKTEXT="Web Developer Toolbar">https://addons.mozilla.org/en-US/firefox/addon/60</URL>.
</DD>
<DD>
<URL LINKTEXT="Cookie Watcher">https://addons.mozilla.org/en-US/firefox/addon/1201</URL>.
</DD>
<DD>
<URL LINKTEXT="XPather">https://addons.mozilla.org/en-US/firefox/addon/1192</URL>.
XPath generator, editor and inspector.
</DD>
<DT>Opera</DT>
<DD>
Tools &gt; Advanced &gt; Error console
</DD>
<DD>
<URL LINKTEXT="Introduction to Opera Dragonfly"
>http://dev.opera.com/articles/view/introduction-to-opera-dragonfly/</URL>
</DD>
<DT>Safari</DT>
<DD>
To display the <ICODE>Develop</ICODE> menu in Safari 3.1 or higher, select
the checkbox labeled "Show Develop menu in menu bar" in
Safari's <ICODE>Advanced</ICODE> Preferences panel.
</DD>
<DD>
<URL LINKTEXT="Safari Web Inspector">http://trac.webkit.org/wiki/Web%20Inspector </URL>
</DD>
<DT>Chrome</DT>
<DD>
JavaScript Console: click the <ICODE>Page</ICODE> menu icon and select
<ICODE>Developer &gt; JavaScript Console</ICODE>. From here, you'll be
able to view errors in the JavaScript execution, and enter
additional javascript commands to execute.
</DD>
<DD>
JavaScript Debugger: available as <ICODE>Page</ICODE> menu icon &gt; <ICODE>Developer</ICODE>
&gt; Debug JavaScript, the debugger provides a command prompt from which you
can set breakpoints, backtrace, and more. Type <ICODE>help</ICODE> at the debugger
command line to get started.
</DD>
<DD>
<UL>
<LI><URL LINKTEXT="Google Chrome Script Debugging"
>http://www.google.com/chrome/intl/en/webmasters-faq.html#jsexec</URL></LI>
<LI><URL LINKTEXT="Developer Tools for Google Chrome"
>http://blog.chromium.org/2009/06/developer-tools-for-google-chrome.html</URL></LI>
<LI><URL LINKTEXT="Tools for Eclipse Users">http://blog.chromium.org/2009/08/google-chrome-developer-tools-for.html</URL></LI>
</UL>
</DD>
<DT>Mac IE</DT>
<DD>
Use the Preferences dialog.
</DD>
</LIST>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Things not to attempt in a browser" ID="doNotTry">
<CONTENT TITLE="How do I detect Opera/Safari/IE?" ID="detectBrowser" NUMID="4_26">
<P>
The short answer: <EM>Don't do that</EM>.
</P>
<P>
The <ICODE>navigator</ICODE> <DFN>host object</DFN> contains properties which
may identify the browser and version. These properties are historically
inaccurate. Some browsers allow the user to set <ICODE>navigator.userAgent</ICODE> to any value. For
example, Firefox, (type <ICODE>about:config</ICODE> and search <ICODE>useragent</ICODE>
or Safari, <ICODE>Develop &gt; User Agent &gt; Other...</ICODE>, IE, via Registry.
</P>
<P>
Other browsers, such as Opera, provide a list of user agents
for the user to select from. There are also at least 25 other
javascript capable browsers, with multiple versions, each
with their own string.
</P>
<P>
Browser detection is unreliable, at best. It usually causes
forward-compatibility and maintenance problems. It is unrelated to the
problem or incompatiblity it is trying to solve and obscures the
problems it is used for, where it is used.
</P>
<P>
Object detection is checking that the object in question exists.
<URL LINKTEXT="Capability detection"
>http://dev.opera.com/articles/view/using-capability-detection/</URL
> goes one step further to actually test the object,
method, or property, to see if behaves in the desired manner.
</P>
<P>
Feature Test Example:
</P>
<CODE>
/**
* Returns the element/object the user targeted.
* If neither DOM nor IE event model is supported, returns undefined.
* @throws TypeError if the event is not an object.
*/
function getEventTarget(e) {
e = e || window.event;
// First check for the existence of standard "target" property.
return e.target || e.srcElement;
}</CODE>
<MOREINFO>
<URL>notes/detect-browser/</URL>
<URL>http://dev.opera.com/articles/view/using-capability-detection/</URL>
<URL>http://developer.apple.com/internet/webcontent/objectdetection.html</URL>
<URL>http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How can I prevent access to a web page by using javascript?"
ID="preventAccess" NUMID="4_5">
<P>
In practice you can't. While you could create a suitable
encryption system with a password in the page, the level of
support you need to do this means it's always simpler to do it
server-side. Anything that &quot;protects&quot; a page
other than the current one is definitely flawed.
</P>
</CONTENT>
<CONTENT TITLE="How do I protect my javascript code?" ID="hideSource" NUMID="4_1">
<P>
With clientside javascript you can't as your code is distributed
in source form and is easily readable. With JScript, there is the
Script Encoder (see MSDN), but this is nothing more than obfuscation.
Attempting to disable the context menu does nothing to
protect your script in a Web browser.
</P>
<MOREINFO>
Your code is likely protected under copyright laws. See:
<URL>http://www.wipo.int/about-ip/en/copyright.html</URL>
<URL>http://webdesign.about.com/od/copyright/Copyright_Issues_on_the_Web_Intellectual_Property.htm</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How do I suppress a context menu (right-click menu)?"
ID="disableRightClick" NUMID="4_27">
<P>
A context menu, often triggered by right-click, can be requested by the
user in a few ways. For example, on windows, shift + F10 and on macs,
click-and-hold. Other input devices exist and mouse buttons can be
configured, making the term "right click" a misnomer, in context.
</P>
<P>
In browsers that allow it, a script can suppress the context menu by
returning false from an object's <ICODE>oncontextmenu</ICODE> event handler.
</P>
<CODE>
document.oncontextmenu = function() {
return false;
};
</CODE>
<P>
Some browsers lack context menus (e.g. iphone). Browsers that have
context menus do not always have a scriptable event for them. Some
browsers can be configured to disallow scripts from detecting context
menu events (IE, Opera); others may fire the event but be configured to
disallow scripts from suppressing the context menu (Firefox,Seamonkey).
</P>
<P>
Even when the context menu has been suppressed, it will still be
possible to view/save the source code and to save images.
</P>
<MOREINFO>
<URL>http://en.wikipedia.org/wiki/Context_menu</URL>
<URL>http://kb.mozillazine.org/Ui.click_hold_context_menus</URL>
<URL>http://support.microsoft.com/kb/823057</URL>
<URL>http://stackoverflow.com/questions/1870880/opera-custom-context-menu-picking-up-the-right-click/1902730#1902730</URL>
<URL>http://support.mozilla.com/en-US/kb/Javascript#Advanced_JavaScript_settings</URL>
<URL>http://msdn.microsoft.com/en-us/library/ms536914%28VS.85%29.aspx</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How can I access the client-side filesystem?" ID="readFile" NUMID="4_3">
<P>
Security means that by default you can't. In a more restricted
environment, there are options. For example, using LiveConnect to
connect to Java with Netscape, and using the FileSystemObject in
IE. Check <URL LINKTEXT="Google Groups archives">http://groups.google.com/group/comp.lang.javascript/topics</URL>
for previous posts on the subject.
</P>
<MOREINFO>
<URL>http://msdn.microsoft.com/en-us/library/z9ty6h50%28VS.85%29.aspx</URL>
<URL>http://www.javaworld.com/javaworld/jw-10-1998/jw-10-apptowin32.html</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="I have &lt;a href=&quot;javascript:somefunction()&quot;&gt; what ... ?"
ID="javascriptURI" NUMID="4_24">
<P>
Whatever the rest of your question, this is generally a very bad idea.
The <ICODE>javascript:</ICODE> pseudo protocol was designed to replace the
current document with the value that is returned from the expression.
For example:
</P>
<CODE>
&lt;a href=&quot;javascript:'&lt;h1&gt;' + document.lastModified + '&lt;/h1&gt;'&quot;&gt;lastModified&lt;/a&gt;
</CODE>
<P>
will result in replacing the current document with the value
returned from <ICODE>document.lastModified</ICODE>, wrapped in an <ICODE>&lt;h1&gt;</ICODE>
tag.
</P>
<P>
When the expression used evaluates to an <ICODE>undefined</ICODE> value
(as some function calls do), the contents of the current page are not
replaced. Regardless, some browsers (notably IE6) interpret this as
navigation and will enter into a 'navigation' state where GIF
animations and plugins (such as movies) will stop and navigational
features such as <ICODE>META</ICODE> refresh, assignment to <ICODE>location.href</ICODE>, and image
swaps fail.
</P>
<P>
It is also possible for IE to be configured such that it supports
javascript but not the <ICODE>javascript:</ICODE> protocol. This results
in the user seeing a protocol error for <ICODE>javascript:</ICODE> URIs.
</P>
<P>
The <ICODE>javascript:</ICODE> pseudo protocol creates accessibility and
usability problems. It provides no fallback for when the script is not
supported.
</P>
<P>
Instead, use
<ICODE>&lt;a href=&quot;something.html&quot; onclick=&quot;somefunction();return false&quot;&gt;</ICODE>
where <ICODE>something.html</ICODE> is a meaningful alternative. Alternatively,
attach the <ICODE>click</ICODE> callback using an event registry.
</P>
<MOREINFO>
<URL>example/jsuri/</URL>
<URL LINKTEXT="Set/Navigate to a Location">http://groups.google.com/group/comp.lang.javascript/msg/f665cfca3b619692</URL>
<URL LINKTEXT="Top Ten Web-Design Mistakes of 2002">http://www.useit.com/alertbox/20021223.html</URL>
</MOREINFO>
</CONTENT>
</CONTENT>
<CONTENT TITLE="Comments and Suggestions" ID="comments" NUMID="5">
<P HTMLONLY="true">
This FAQ uses the CSS stylesheet <URL>faq.css</URL> and is generated
from the XML source <URL>index.xml</URL> using the XSLT stylesheet
<URL>index.xsl</URL><!-- which also checks the links -->.
</P>
<CONTENT TITLE="Why do some posts have &lt;FAQENTRY&gt; in them?" ID="FAQENTRY" NUMID="5_1">
<P>
If a poster feels that the question they are answering should be
covered in the FAQ, placing &lt;FAQENTRY&gt; in the post lets the FAQ
robot collect the messages for easy review and inclusion. A Draft Proposal
for the FAQ is requested and appreciated.
</P>
<P>
The &lt;FAQENTRY&gt; should not be used in posts except in
conjunction with a suggestion/proposal for this FAQ. It should
also not be literally quoted in replies, instead it should be
partly obscured as, e.g. &lt;FAQ**TRY&gt; or similar.
</P>
</CONTENT>
<CONTENT TITLE="How do I make a suggestion?" NUMID="5_2" ID="makeSuggestion">
<P>
To make a suggestion to this FAQ, use either the FAQENTRY method
above, or e-mail Thomas 'PointedEars' Lahn &lt;cljs&#64;PointedEars.de&gt; (editor).
All comments, suggestions, and especially corrections are welcome.
</P>
</CONTENT>
<!-- FIXME -->
<!--
<P>
This FAQ is (C) Copyright Contributors on behalf of the
newsgroup comp.lang.javascript. Upon change of the FAQ maintainer,
the copyright will automatically pass over to the new maintainer.
</P>
-->
</CONTENT>
&meta;
&overview;
&resources;
&functions;
&dates;
&numbers;
&objects;
&strings;
&dom;
&windows;
&server;
&debugging;
&donts;
&suggestions;
</CONTENTS>
</FAQ>
</FAQ>
/trunk/cljs/sections/dates.xml
0,0 → 1,99
<?xml version="1.0" encoding="UTF-8"?>
<CONTENT TITLE="Dates" ID="dates">
<P>
ISO 8601 defines date and time formats. Some benefits include:
</P>
<LIST TYPE="UL">
<LI>language-independent and unambiguous world-wide</LI>
<LI>sortable with a trivial string comparison</LI>
<LI>easily readable and writable by software</LI>
<LI>compatible with standards ISO 9075 and <URL LINKTEXT="rfc 3339">http://www.ietf.org/rfc/rfc3339.txt</URL></LI>
</LIST>
<P>
The ISO Extended format for common date is <ICODE>YYYY-MM-DD</ICODE>, and for time is
<ICODE>hh:mm:ss</ICODE>.
</P>
<P>
For an event with an offset from UTC, use <ICODE>YYYY-MM-DDThh:mm:ss&#177;hh:mm</ICODE>.
</P>
<P>
Never use a local date/time format for a non-local event. Instead, use
UTC, as in <ICODE>YYYY-MM-DDThh:mm:ssZ</ICODE> (<ICODE>Z</ICODE> is the only letter suffix).
</P>
<P>
The <ICODE>T</ICODE> can be omitted where that would not cause ambiguity. For
rfc 3339 compliance, it may be replaced by a space and for SQL,
it <EM>must</EM> be replaced by a single space.
</P>
<P>
Year <ICODE>0000</ICODE> is unrecognized by some formats (XML Schema, <ICODE>xs:date</ICODE>).
</P>
<MOREINFO>
<URL LINKTEXT="ECMA-262 Date.prototype, s. 15.9">#onlineResources</URL>
<URL LINKTEXT="A summary of the international standard date and time notation, by Markus Kuhn"
>http://www.cl.cam.ac.uk/~mgk25/iso-time.html</URL>
<URL>http://en.wikipedia.org/wiki/ISO_8601</URL>
<URL LINKTEXT="ISO 8601:2004(E)">res/ISO_8601-2004_E.pdf</URL>
<URL LINKTEXT="W3C QA Tip: Use international date format (ISO)">http://www.w3.org/QA/Tips/iso-date</URL>
<URL LINKTEXT="RFC 3339, Date and Time on the Internet: Timestamps"
>http://www.ietf.org/rfc/rfc3339.txt</URL>
<URL>http://www.w3.org/TR/xmlschema-2/#dateTime</URL>
</MOREINFO>
 
<CONTENT TITLE="How do I format a Date object with javascript?" ID="formatDate" NUMID="4_30">
<P>
A local <ICODE>Date</ICODE> object where <ICODE>0 &lt;= year &lt;= 9999</ICODE> can be
formatted to a common ISO 8601 format <ICODE>YYYY-MM-DD</ICODE> with:-
</P>
<CODE>
/** Formats a Date to YYYY-MM-DD (local time), compatible with both
* ISO 8601 and ISO/IEC 9075-2:2003 (E) (SQL 'date' type).
* @param {Date} dateInRange year 0000 to 9999.
* @throws {RangeError} if the year is not in range
*/
function formatDate(dateInRange) {
var year = dateInRange.getFullYear(),
isInRange = year &gt;= 0 &amp;&amp; year &lt;= 9999, yyyy, mm, dd;
if(!isInRange) {
throw RangeError("formatDate: year must be 0000-9999");
}
yyyy = ("000" + year).slice(-4);
mm = ("0" + (dateInRange.getMonth() + 1)).slice(-2);
dd = ("0" + (dateInRange.getDate())).slice(-2);
return yyyy + "-" + mm + "-" + dd;
}
</CODE>
<MOREINFO>
<URL>http://www.merlyn.demon.co.uk/js-date9.htm</URL>
</MOREINFO>
</CONTENT>
<CONTENT TITLE="How can I create a Date object from a String?" ID="parseDate">
<P>
An Extended ISO 8601 local Date format <ICODE>YYYY-MM-DD</ICODE> can be parsed to a
Date with the following:
</P>
<CODE>
/**Parses string formatted as YYYY-MM-DD to a Date object.
* If the supplied string does not match the format, an
* invalid Date (value NaN) is returned.
* @param {string} dateStringInRange format YYYY-MM-DD, with year in
* range of 0000-9999, inclusive.
* @return {Date} Date object representing the string.
*/
function parseISO8601(dateStringInRange) {
var isoExp = /^\s*(\d{4})-(\d\d)-(\d\d)\s*$/,
date = new Date(NaN), month,
parts = isoExp.exec(dateStringInRange);
 
if(parts) {
month = +parts[2];
date.setFullYear(parts[1], month - 1, parts[3]);
if(month != date.getMonth() + 1) {
date.setTime(NaN);
}
}
return date;
}
</CODE>
</CONTENT>
</CONTENT>
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/meta.xml
===================================================================
--- trunk/cljs/sections/meta.xml (nonexistent)
+++ trunk/cljs/sections/meta.xml (revision 25)
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Meta-FAQ meta-questions" ID="meta" NUMID="1">
+ <P>
+ This is the <EM>comp.lang.javascript</EM> meta-FAQ, <VER/>. The latest
+ version is available at <URL>http://jibbering.com/faq/</URL> in HTML form.
+ </P>
+ <P>
+ Each day, one section of the FAQ is posted for review and questions,
+ and as a reminder that the FAQ is available.
+ </P>
+ <P>
+ For additional explanation and detail relating to some aspects
+ of the FAQ, please see the
+ <URL LINKTEXT="FAQ Notes">notes/</URL>.
+ It has been provided separately to avoid increasing the size of
+ the FAQ to a point where it would be unreasonable to post it to
+ the group.
+ </P>
+ <P>
+ Code examples in this FAQ use <URL LINKTEXT="JSDoc Toolkit"
+ >http://jsdoctoolkit.org/</URL> comments.
+ </P>
+
+ <CONTENT TITLE="Which newsgroups deal with javascript?" ID="newsgroups" NUMID="2_1">
+ <P>
+ The official Big 8 Usenet newsgroup dealing with javascript is
+ <NEWSGROUP>comp.lang.javascript</NEWSGROUP>.
+ Some "language" hierarchies also have *.comp.lang.javascript groups.
+ </P>
+ <P>
+ c.l.js is an unmoderated newsgroup.
+ </P>
+ </CONTENT>
+
+ <CONTENT TITLE="What questions are on-topic for comp.lang.javascript?" ID="appropriateQuestions" NUMID="2_2">
+ <P>
+ The comp.lang.javascript newsgroup deals with ECMAScript
+ languages, so any questions about JavaScript or JScript are
+ welcome. However, the majority of questions sent to this group
+ relates to javascript in a web browser. If you are experiencing
+ issues with a particular browser, or the host is not a browser
+ at all, please make this information clear.
+ </P>
+ <P>
+ Javascript and Java are two completely different languages.
+ Java questions should be asked in one of the comp.lang.java.*
+ newsgroups; they are not appropriate for c.l.js (as Java and
+ javascript are distinct programming languages with only
+ superficial similarities due to sharing a C-like syntax and
+ some of the characters in their names).
+ </P>
+ <P>
+ Questions dealing with other scripting languages, such as
+ VBScript, PerlScript or CGI scripting are also off-topic,
+ as are HTML-only or CSS-only questions.
+ </P>
+ <!--
+ <P>
+ Questions about the design of various javascript libraries are
+ appropriate; questions on how to <EM>use</EM> such libraries
+ are not. Check <URL LINKTEXT="c.l.js FAQ Resources"
+ >http://jibbering.comindex.html#libraryResources</URL> or search the web.
+ </P>
+ -->
+ <P>
+ Questions that are specific to Microsoft's JScript may also
+ be appropriately asked at:
+ <NEWSGROUP>microsoft.public.scripting.jscript</NEWSGROUP>
+ </P>
+ <P>
+ The comp.lang.javascript newsgroup charter is included in
+ <URL>faq_notes/cljs_charter.html</URL>.
+ </P>
+ </CONTENT>
+
+ <CONTENT TITLE="What should I do before posting to comp.lang.javascript?" ID="posting" NUMID="2_3">
+ <P>
+ Before posting to c.l.js, you should read this document.
+ You should also check the <URL LINKTEXT="Resources section">#onlineResources</URL>.
+ </P>
+ <LIST TYPE="UL" TITLE="How to Ask a Question" ID="ask">
+ <LI>State your question clearly and concisely.</LI>
+ <LI>Use the Subject: line to show the type of problem you have but
+ include the question in the body as well.</LI>
+ <LI>For a more detailed explanation of formatting, see
+ &quot;<URL LINKTEXT="Posting Questions and Replies to comp.lang.javascript">notes/posting/</URL>&quot;.</LI>
+ </LIST>
+
+ <LIST TYPE="UL" TITLE="Replying" ID="reply">
+ <LI>Quote only relevant parts of earlier messages, and add your
+ comments below each quoted section
+ (<URL LINKTEXT="FYI28/RFC1855">http://www.ietf.org/rfc/rfc1855.txt</URL>).</LI>
+ <LI>Link to specific sections of the FAQ that are relevant.</LI>
+ <LI>Avoid being unnecessarily rude, but do not complain about other rude posts.</LI>
+ <LI>Don't quote signatures.</LI>
+ </LIST>
+
+ <LIST TYPE="UL" TITLE="Posting Code" ID="postCode">
+ <LI>
+ Remove everything that does not contribute to the problem (images,
+ markup, other scripts, etc).
+ </LI>
+ <LI>Validate the HTML and CSS <URL>http://validator.w3.org/</URL>,
+ <URL>http://jigsaw.w3.org/css-validator/</URL>.</LI>
+ <LI>Make sure the code is executable as transmitted.</LI>
+ <LI>Format lines to 72 characters; indent with 2-4 spaces (not tabs).</LI>
+ <LI>State what you expect the code to do.</LI>
+ <LI>Mention the platforms, browsers, and versions.</LI>
+ <LI>See also the <URL LINKTEXT="FAQ section on debugging">#debugging</URL>.</LI>
+ <LI>Post in plain-text only. Do not encode it. Do not attach files.</LI>
+ <LI>If the code is more than about 100 lines, provide a URL in addition.</LI>
+ <LI>Do not multi-post; cross-post if necessary
+ (<URL LINKTEXT="Wikipedia description">http://en.wikipedia.org/wiki/Cross-post</URL>).</LI>
+ </LIST>
+ <LIST TYPE="UL" TITLE="What Not to Post" ID="doNotPost">
+ <LI>Do not post job postings. Job postings should go to
+ an appropriate regional jobs group.</LI>
+ <LI>Do not post copyright material without permission
+ from the copyright holder.</LI>
+ </LIST>
+ <P>
+ Relevant announcements are welcome, but no more often than once
+ per major release, as a short link to the product's webpage.
+ </P>
+ </CONTENT>
+
+ <CONTENT TITLE="Why was my post not answered?" ID="noAnswer" NUMID="2_4">
+ <P>This could be for several reasons:</P>
+ <UL>
+ <LI>It was a variation of a frequently asked question and was
+ therefore ignored by everyone.</LI>
+ <LI>Nobody knows the answer.</LI>
+ <LI>The person with the answer has not seen the post.</LI>
+ <LI>It might not be possible to do what you want to do but perhaps
+ readers of c.l.js are reluctant to answer your post in the negative
+ when they are not convinced that it cannot be done.</LI>
+ <LI>The question was not asked clearly enough, or did not included
+ enough information to be answered.</LI>
+ <LI>The questioner did not realise the need to read the group, for a
+ few days, to see the answers posted there.</LI>
+ <LI>You ignored the <URL LINKTEXT="section on posting">#posting</URL></LI>
+ </UL>
+
+ <p>If it is not one of these, then after a few days consider
+ reposting after checking
+ <URL>http://groups.google.com/group/comp.lang.javascript/topics</URL>
+ for replies. Make sure the post is phrased well, and everything
+ needed to answer is correct, and the subject is appropriate.</p>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/meta.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/overview.xml
===================================================================
--- trunk/cljs/sections/overview.xml (nonexistent)
+++ trunk/cljs/sections/overview.xml (revision 25)
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Language Overview" ID="tips" NUMID="2">
+ <CONTENT TITLE="What is ECMAScript?" ID="ecma" NUMID="2_6">
+ <P>
+ <URL LINKTEXT="ECMA-262">http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
+ is the international standard that current language implementations
+ (JavaScript&trade;, JScript etc.) are based on.
+ </P>
+ <P>
+ <URL LINKTEXT="ECMA-262">http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
+ defines the language Syntax, Types, Keywords, Operators, and built-in
+ objects. The ECMAScript specification is the reference to determine the
+ expected behavior of a program. ECMAScript does not define any host
+ objects, such as <ICODE>document</ICODE>, <ICODE>window</ICODE>, or
+ <ICODE>ActiveXObject</ICODE>.
+ </P>
+ <P>
+ ECMA-327 defines the Compact Profile of ECMAScript by
+ describing the features from ECMA 262 that may be omitted in some
+ resource-constrained environments.
+ <URL>http://www.ecma-international.org/publications/standards/Ecma-327.htm</URL>
+ </P>
+ <P>
+ The most widely supported edition of ECMA-262 is the 3rd edition (1999).
+ There is fair support for this edition in JScript 5.5+ (buggy) and good
+ support JavaScript 1.5.
+ </P>
+ <P>
+ The term "javascript" is used as a common name for all dialects of ECMAScript.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="What is JScript?" ID="jScript" NUMID="2_7">
+ <P>
+ JScript is Microsoft's implementation of ECMAScript.
+ </P>
+ <P>
+ Questions that are specific to Microsoft's JScript may also
+ be appropriately asked at:
+ <NEWSGROUP>microsoft.public.scripting.jscript</NEWSGROUP>.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="What is the Document Object Model (DOM)?" ID="dom" NUMID="2_9">
+ <P>
+ The <DFN>Document Object Model</DFN> (DOM) is a interface-based model for <ICODE>Document</ICODE>
+ objects. The DOM allows scripts to dynamically access and update a
+ document's content, style, and event handlers.
+ </P>
+ <P>
+ The DOM is <EM>not</EM> part of the ECMAScript programming language.
+ </P>
+ <P>
+ Official DOM standards are defined by the World Wide Web Consortium.
+ Scriptable browsers also have <DFN>proprietary</DFN> DOM features (<URL
+ LINKTEXT="MSDN">http://msdn.microsoft.com/en-us/library/ms533050(VS.85).aspx</URL>, <URL
+ LINKTEXT="MDC">https://developer.mozilla.org/en/DOM_Client_Object_Cross-Reference</URL>),
+ such as <ICODE>document.writeln()</ICODE>.
+ </P>
+ <P>
+ Also see the section on <URL LINKTEXT="DOM and Forms">#domRef</URL>.
+ </P>
+ <MOREINFO>
+ <URL LINKTEXT="c.l.js DOM Resources">#onlineResources</URL>
+ <URL LINKTEXT="W3C DOM FAQ">http://www.w3.org/DOM/faq.html</URL>
+ <URL LINKTEXT="W3C DOM ">http://www.w3.org/DOM/</URL>
+ <URL LINKTEXT="MDC: What is the DOM?">https://developer.mozilla.org/en/Gecko_DOM_Reference/Introduction#What_is_the_DOM.3F</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Internationalisation and Localisation in javascript" ID="localization" NUMID="2_10">
+ <P>
+ <DFN>Internationalisation</DFN> means using one form which is everywhere both
+ acceptable and understood. Any international standard not supported by
+ default can be coded for.
+ </P>
+ <P>
+ For example, there is an International Standard for numeric Gregorian
+ date format; but none for decimal and thousands separators.
+ </P>
+ <P>
+ <DFN>Localisation</DFN> is the process of adapting software for a specific region
+ or language by adding locale-specific components and translating text. It
+ cannot work well in general, because it requires a knowledge of all
+ preferences and the ability to choose the right one, in an environment
+ where many systems are inappropriately set anyway.
+ </P>
+ <P>
+ ECMAScript has a few <DFN>localisation</DFN> features. The various
+ <ICODE>toString()</ICODE> methods are all implementation dependent,
+ but tend to use either UK or US settings (not necessarily correctly).
+ ECMAScript Ed. 3 introduced some capabilities, including the
+ <ICODE>toLocaleString()</ICODE>method which should create a string
+ based on the host's locale.
+ </P>
+ <P>
+ ECMAScript 5th Edition introduces limited ISO 8601 capabilities with
+ <ICODE>Date.prototype.toISOString()</ICODE> and new behavior for <ICODE>Date.parse()</ICODE>.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="What does the future hold for ECMAScript?" ID="futureEcmaScript" NUMID="2_12">
+ <P>
+ The 5th edition of ECMAScript was approved on 2009-12-04. There is some
+ support in implementations released before approval date (JScript 5.8,
+ JavaScript 1.8, JavaScriptCore).
+ http://www.ecma-international.org/publications/standards/Ecma-262.htm
+ </P>
+ <MOREINFO>
+ <URL>http://www.ecma-international.org/publications/standards/Ecma-262.htm</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/overview.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/server.xml
===================================================================
--- trunk/cljs/sections/server.xml (nonexistent)
+++ trunk/cljs/sections/server.xml (revision 25)
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Ajax and Server Communication" ID="ajaxRef">
+ <CONTENT TITLE="What is Ajax?" ID="ajax" NUMID="4_44">
+ <P>
+<DFN TITLE="Asynchronous JavaScript and XML">Ajax</DFN>
+is shorthand for Asynchronous JavaScript and XML. The technology is
+based on the <ICODE>XMLHttpRequest</ICODE> Object. At its simplest,
+it is the sending/retrieving of new data from the server without
+changing or reloading the window location.
+ </P>
+<MOREINFO>
+Mozilla Documentation:
+<URL>http://developer.mozilla.org/en/docs/XMLHttpRequest</URL>
+MSDN Documention:
+<URL>http://msdn.microsoft.com/en-us/library/ms535874%28VS.85%29.aspx</URL>
+<URL>http://msdn.microsoft.com/en-us/library/ms759148%28VS.85%29.aspx</URL>
+
+<DFN TITLE="Asynchronous JavaScript and XML">Ajax</DFN>
+Libraries and Tutorial Sites:
+<URL>http://jibbering.com/2002/4/httprequest.html</URL>
+<URL>http://www.ajaxtoolbox.com/</URL>
+</MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I download a page to a variable?" ID="downloadPage" NUMID="4_38">
+ <P>
+Although <ICODE>XMLHttpRequest</ICODE> can be used to download
+entire pages, it is often used for downloading small pieces
+of data that can be used to update the current page.
+ </P>
+ <MOREINFO>
+ <URL>http://jibbering.com/2002/4/httprequest.html</URL>
+ <URL>http://www.ajaxtoolbox.com/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I get a jsp/php variable into client-side javascript?"
+ ID="getServerVariable" NUMID="4_18">
+ <P>
+Use a server-side language to generate the javascript.
+</P>
+<P>
+Certain characters of ECMAScript strings must be escaped by backslash.
+These include quote marks, backslash, and line terminators.
+</P>
+<P>JSP Example, using Apache Commons: <ICODE>org.apache.commons.lang.StringEscapeUtils</ICODE>:
+</P>
+ <CODE>
+var jsVar = "&lt;%= StringEscapeUtils.escapeJavaScript(str) %&gt;";
+</CODE>
+<P>PHP example using <ICODE>addcslashes</ICODE>: </P>
+<CODE>
+var jsVar = "&lt;?php echo addcslashes($str,"\\\'\"\n\r"); ?&gt;";
+</CODE>
+ <MOREINFO>
+ <URL>example/addcslashes.php</URL>
+ <URL>http://php.net/manual/en/function.addcslashes.php</URL>
+ <URL>http://commons.apache.org/lang/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I log-out a user when they leave my site?"
+ ID="sessionExpired" NUMID="4_29">
+ <P>
+This cannot be done reliably. Here's why:
+ </P>
+ <UL>
+ <LI>
+The user may disable javascript so the log-out script will
+never execute.
+ </LI>
+ <LI>
+The user may not be on-line when they close your web page.
+ </LI>
+ <LI>
+Javascript errors elsewhere in the page may prevent the script
+executing.
+ </LI>
+ <LI>
+The browser may not support the onunload event, or may not fire
+it under certain circumstances, so the log-out function will
+not execute.
+ </LI>
+ </UL>
+The URL below has more information.
+<MOREINFO>
+<URL>http://groups.google.com/groups?selm=BlmZ7.55691%244x4.7344316%40news2-win.server.ntlworld.com</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I run a server side script?" ID="runServerScript" NUMID="4_34">
+ <P>
+You trigger a server-side script by sending an HTTP request.
+This can be achieved by setting the <ICODE>src</ICODE> of an <ICODE>img</ICODE>,
+<ICODE>Image</ICODE>, <ICODE>frame</ICODE>, or <ICODE>iframe</ICODE>, or by using <DFN
+TITLE="XMLHttpRequest or XMLHTTP">XHR</DFN>, where supported.
+ </P>
+ <P>
+An image will also
+&quot;swallow&quot; the data sent back by the server, so that they will
+not be visible anywhere.
+</P>
+ <CODE>
+ var dummyImage = new Image();
+ dummyImage.src = &quot;scriptURL.asp?param=&quot; + varName;
+</CODE>
+ <P>
+Mozilla, Opera 7.6+, Safari 1.2+, and Windows IE 7
+provide the <ICODE>XMLHttpRequest</ICODE> object
+(Windows IE versions 5+, provides ActiveX to acheive an analagous
+effect). <ICODE>XMLHttpRequest</ICODE> can send HTTP requests to
+the server, and provides access the <ICODE>responseText</ICODE> or <ICODE>responseXML</ICODE>
+(when the response is XML), and HTTP header information.
+</P>
+<MOREINFO>
+<URL>http://jibbering.com/2002/4/httprequest.html</URL>
+<URL>http://www.w3.org/TR/XMLHttpRequest/</URL>
+<URL>http://developer.mozilla.org/en/XMLHttpRequest</URL>
+<URL>http://msdn.microsoft.com/en-us/library/ms537505(VS.85).aspx</URL>
+</MOREINFO>
+ <CONTENT TITLE="Why are my rollovers so slow?" ID="imageCache" NUMID="4_31">
+ <P>
+Images are cached by the browser depending on the headers sent by
+the server. If the server does not send sufficient information
+for the browser to decide the image is cacheable, the browser
+will check if the image has been updated every time you change the
+src of an image (in some user settings). To overcome this you
+must send suitable headers.
+ </P>
+<MOREINFO>
+<URL>http://www.mnot.net/cache_docs/</URL>
+</MOREINFO>
+ </CONTENT>
+ </CONTENT>
+ <CONTENT TITLE="How do I force a reload from the server/prevent caching?"
+ ID="noCache" NUMID="4_17">
+ <P>
+To reload a page, use <ICODE>location.reload()</ICODE>. However, this depends
+upon the cache headers that your server sends. To change this,
+you need to alter the server configuration. A quick fix on the
+client is to change the page URI so that it contains a unique
+element, such as the current time. For example:
+<ICODE>location.replace(location.href+'?d='+new Date().valueOf())</ICODE>
+If the <ICODE>location.href</ICODE> already contains a query String, use:
+<ICODE>location.replace(location.href+'&amp;d='+new Date().valueOf())</ICODE>
+ </P>
+ <MOREINFO>
+ <URL>http://www.mnot.net/cache_docs/</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/date.htm</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT
+ TITLE="Why is my Ajax page not updated properly when using an HTTP GET request in Internet Explorer?"
+ ID="ajaxCache" NUMID="4_45">
+ <P>
+ Browsers cache the results of HTTP requests to reduce network traffic.
+ To force the browser to request the document from the server, either
+ set the <ICODE>EXPIRES</ICODE> and/or <ICODE>CACHE-CONTROL</ICODE> response header(s)
+ with a past date or use a unique query string.
+</P>
+ <CODE>
+ req.open("GET", "/example.jsp?date=" + (+new Date), true);
+</CODE>
+
+Always use the appropriate HTTP method. Do not use <ICODE>POST</ICODE>
+to prevent caching. See <URL LINKTEXT="RFC 2616"
+>http://www.faqs.org/rfcs/rfc2616.html</URL>.
+
+<MOREINFO>
+<URL>http://www.mnot.net/cache_docs/#EXPIRES</URL>
+<URL>http://www.mnot.net/javascript/xmlhttprequest/cache.html </URL>
+</MOREINFO>
+ </CONTENT>
+ </CONTENT>
\ No newline at end of file
/trunk/cljs/sections/server.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/donts.xml
===================================================================
--- trunk/cljs/sections/donts.xml (nonexistent)
+++ trunk/cljs/sections/donts.xml (revision 25)
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Things not to attempt in a browser" ID="doNotTry">
+ <CONTENT TITLE="How do I detect Opera/Safari/IE?" ID="detectBrowser" NUMID="4_26">
+ <P>
+The short answer: <EM>Don't do that</EM>.
+ </P>
+ <P>
+The <ICODE>navigator</ICODE> <DFN>host object</DFN> contains properties which
+may identify the browser and version. These properties are historically
+inaccurate. Some browsers allow the user to set <ICODE>navigator.userAgent</ICODE> to any value. For
+example, Firefox, (type <ICODE>about:config</ICODE> and search <ICODE>useragent</ICODE>
+or Safari, <ICODE>Develop &gt; User Agent &gt; Other...</ICODE>, IE, via Registry.
+ </P>
+ <P>
+Other browsers, such as Opera, provide a list of user agents
+for the user to select from. There are also at least 25 other
+javascript capable browsers, with multiple versions, each
+with their own string.
+ </P>
+ <P>
+Browser detection is unreliable, at best. It usually causes
+forward-compatibility and maintenance problems. It is unrelated to the
+problem or incompatiblity it is trying to solve and obscures the
+problems it is used for, where it is used.
+ </P>
+ <P>
+Object detection is checking that the object in question exists.
+<URL LINKTEXT="Capability detection"
+>http://dev.opera.com/articles/view/using-capability-detection/</URL
+ > goes one step further to actually test the object,
+method, or property, to see if behaves in the desired manner.
+ </P>
+ <P>
+Feature Test Example:
+ </P>
+ <CODE>
+/**
+ * Returns the element/object the user targeted.
+ * If neither DOM nor IE event model is supported, returns undefined.
+ * @throws TypeError if the event is not an object.
+ */
+function getEventTarget(e) {
+ e = e || window.event;
+ // First check for the existence of standard "target" property.
+ return e.target || e.srcElement;
+}</CODE>
+<MOREINFO>
+<URL>notes/detect-browser/</URL>
+<URL>http://dev.opera.com/articles/view/using-capability-detection/</URL>
+<URL>http://developer.apple.com/internet/webcontent/objectdetection.html</URL>
+<URL>http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43</URL>
+</MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How can I prevent access to a web page by using javascript?"
+ ID="preventAccess" NUMID="4_5">
+ <P>
+In practice you can't. While you could create a suitable
+encryption system with a password in the page, the level of
+support you need to do this means it's always simpler to do it
+server-side. Anything that &quot;protects&quot; a page
+other than the current one is definitely flawed.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="How do I protect my javascript code?" ID="hideSource" NUMID="4_1">
+ <P>
+With clientside javascript you can't as your code is distributed
+in source form and is easily readable. With JScript, there is the
+Script Encoder (see MSDN), but this is nothing more than obfuscation.
+Attempting to disable the context menu does nothing to
+protect your script in a Web browser.
+ </P>
+ <MOREINFO>
+ Your code is likely protected under copyright laws. See:
+ <URL>http://www.wipo.int/about-ip/en/copyright.html</URL>
+ <URL>http://webdesign.about.com/od/copyright/Copyright_Issues_on_the_Web_Intellectual_Property.htm</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I suppress a context menu (right-click menu)?"
+ ID="disableRightClick" NUMID="4_27">
+ <P>
+A context menu, often triggered by right-click, can be requested by the
+user in a few ways. For example, on windows, shift + F10 and on macs,
+click-and-hold. Other input devices exist and mouse buttons can be
+configured, making the term "right click" a misnomer, in context.
+</P>
+<P>
+In browsers that allow it, a script can suppress the context menu by
+returning false from an object's <ICODE>oncontextmenu</ICODE> event handler.
+</P>
+<CODE>
+document.oncontextmenu = function() {
+ return false;
+};
+</CODE>
+<P>
+Some browsers lack context menus (e.g. iphone). Browsers that have
+context menus do not always have a scriptable event for them. Some
+browsers can be configured to disallow scripts from detecting context
+menu events (IE, Opera); others may fire the event but be configured to
+disallow scripts from suppressing the context menu (Firefox,Seamonkey).
+</P>
+<P>
+Even when the context menu has been suppressed, it will still be
+possible to view/save the source code and to save images.
+</P>
+<MOREINFO>
+<URL>http://en.wikipedia.org/wiki/Context_menu</URL>
+<URL>http://kb.mozillazine.org/Ui.click_hold_context_menus</URL>
+<URL>http://support.microsoft.com/kb/823057</URL>
+<URL>http://stackoverflow.com/questions/1870880/opera-custom-context-menu-picking-up-the-right-click/1902730#1902730</URL>
+<URL>http://support.mozilla.com/en-US/kb/Javascript#Advanced_JavaScript_settings</URL>
+<URL>http://msdn.microsoft.com/en-us/library/ms536914%28VS.85%29.aspx</URL>
+</MOREINFO>
+</CONTENT>
+ <CONTENT TITLE="How can I access the client-side filesystem?" ID="readFile" NUMID="4_3">
+ <P>
+Security means that by default you can't. In a more restricted
+environment, there are options. For example, using LiveConnect to
+connect to Java with Netscape, and using the FileSystemObject in
+IE. Check <URL LINKTEXT="Google Groups archives">http://groups.google.com/group/comp.lang.javascript/topics</URL>
+for previous posts on the subject.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/z9ty6h50%28VS.85%29.aspx</URL>
+ <URL>http://www.javaworld.com/javaworld/jw-10-1998/jw-10-apptowin32.html</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="I have &lt;a href=&quot;javascript:somefunction()&quot;&gt; what ... ?"
+ ID="javascriptURI" NUMID="4_24">
+ <P>
+Whatever the rest of your question, this is generally a very bad idea.
+The <ICODE>javascript:</ICODE> pseudo protocol was designed to replace the
+current document with the value that is returned from the expression.
+For example:
+ </P>
+ <CODE>
+ &lt;a href=&quot;javascript:'&lt;h1&gt;' + document.lastModified + '&lt;/h1&gt;'&quot;&gt;lastModified&lt;/a&gt;
+</CODE>
+ <P>
+will result in replacing the current document with the value
+returned from <ICODE>document.lastModified</ICODE>, wrapped in an <ICODE>&lt;h1&gt;</ICODE>
+tag.
+ </P>
+ <P>
+When the expression used evaluates to an <ICODE>undefined</ICODE> value
+(as some function calls do), the contents of the current page are not
+replaced. Regardless, some browsers (notably IE6) interpret this as
+navigation and will enter into a 'navigation' state where GIF
+animations and plugins (such as movies) will stop and navigational
+features such as <ICODE>META</ICODE> refresh, assignment to <ICODE>location.href</ICODE>, and image
+swaps fail.
+ </P>
+ <P>
+It is also possible for IE to be configured such that it supports
+javascript but not the <ICODE>javascript:</ICODE> protocol. This results
+in the user seeing a protocol error for <ICODE>javascript:</ICODE> URIs.
+ </P>
+ <P>
+The <ICODE>javascript:</ICODE> pseudo protocol creates accessibility and
+usability problems. It provides no fallback for when the script is not
+supported.
+ </P>
+ <P>
+Instead, use
+<ICODE>&lt;a href=&quot;something.html&quot; onclick=&quot;somefunction();return false&quot;&gt;</ICODE>
+where <ICODE>something.html</ICODE> is a meaningful alternative. Alternatively,
+attach the <ICODE>click</ICODE> callback using an event registry.
+ </P>
+ <MOREINFO>
+ <URL>example/jsuri/</URL>
+ <URL LINKTEXT="Set/Navigate to a Location">http://groups.google.com/group/comp.lang.javascript/msg/f665cfca3b619692</URL>
+ <URL LINKTEXT="Top Ten Web-Design Mistakes of 2002">http://www.useit.com/alertbox/20021223.html</URL>
+ </MOREINFO>
+ </CONTENT>
+ </CONTENT>
\ No newline at end of file
/trunk/cljs/sections/donts.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/functions.xml
===================================================================
--- trunk/cljs/sections/functions.xml (nonexistent)
+++ trunk/cljs/sections/functions.xml (revision 25)
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Functions" ID="functions">
+ <CONTENT TITLE="What is (function(){ /*...*/ })() ?" ID="scope">
+ <P>
+ This is an anonymous <DFN>FunctionExpression</DFN> that is called
+ immediately after creation.
+ </P>
+ <P>
+ Variables declared inside a function are not accessible from
+ outside the function. This can be useful, for example, to hide
+ implementation details or to avoid polluting the global scope.
+ </P>
+ <MOREINFO>
+ <URL>http://yura.thinkweb2.com/named-function-expressions/</URL>
+ <URL>notes/closures/</URL>
+ <URL>http://dmitrysoshnikov.com/ecmascript/chapter-5-functions/#question-about-surrounding-parentheses</URL>
+ </MOREINFO>
+ </CONTENT>
+
+ <CONTENT TITLE="What is a function statement?" ID="functionStatement">
+ <P>
+ The term <DFN>function statement</DFN> has been widely and wrongly used to
+ describe a <ICODE>FunctionDeclaration</ICODE>. This is misleading because in ECMAScript,
+ a <ICODE>FunctionDeclaration</ICODE> is not a <DFN>Statement</DFN>; there are places in a program
+ where a <DFN>Statement</DFN> is permitted but a <ICODE>FunctionDeclaration</ICODE> is not. To add
+ to this confusion, some implementations, notably Mozillas', provide a
+ syntax extension called <DFN>function statement</DFN>. This is allowed under
+ section 16 of ECMA-262, Editions 3 and 5.
+ </P>
+ <P>
+ Example of nonstandard <DFN>function statement</DFN>:
+ </P>
+ <CODE>
+// Nonstandard syntax, found in GMail source code. DO NOT USE.
+try {
+ // FunctionDeclaration not allowed in Block.
+ function Fze(b,a){return b.unselectable=a}
+ /*...*/
+} catch(e) { _DumpException(e) }
+ </CODE>
+ <P>
+ Code that uses <DFN>function statement</DFN> has three known interpretations. Some
+ implementations process <ICODE>Fze</ICODE> as a <DFN>Statement</DFN>, in order. Others, including
+ JScript, evaluate <ICODE>Fze</ICODE> upon entering the execution context that it
+ appears in. Yet others, notably DMDScript and default configuration of BESEN,
+ throw a <ICODE>SyntaxError</ICODE>.
+ </P>
+ <P>
+ For consistent behavior across implementations, <EM>do not use function
+ statement</EM>; use either <ICODE>FunctionExpression</ICODE> or <ICODE>FunctionDeclaration</ICODE> instead.
+ </P>
+ <P>
+ Example of <ICODE>FunctionExpression</ICODE> (valid):
+ </P>
+ <CODE>
+var Fze;
+try {
+ Fze = function(b,a){return b.unselectable=a};
+ /*...*/
+} catch(e) { _DumpException(e) }
+ </CODE>
+ Example of <ICODE>FunctionDeclaration</ICODE> (valid):
+ <CODE>
+// Program code
+function aa(b,a){return b.unselectable=a}
+ </CODE>
+<!--
+Notable examples of the misuse of the term "function statement"
+can be seen in David Flanagan's "JavaScript: The Definitive Guide",
+Douglas Crockford's "JavaScript: The Good Parts", MDC documentation,
+JSLint error messages.
+-->
+ <MOREINFO>
+ <URL>example/functionStatement.html</URL>
+ <URL>https://mail.mozilla.org/pipermail/es-discuss/2008-February/005314.html</URL>
+ <URL>http://groups.google.com/group/comp.lang.javascript/msg/aa9a32d0c6ae0342</URL>
+ <URL>http://groups.google.com/group/comp.lang.javascript/msg/3987eac87ad27966</URL>
+ <URL>http://nanto.asablo.jp/blog/2005/12/10/172622</URL> (Article in Japanese)
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/functions.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/objects.xml
===================================================================
--- trunk/cljs/sections/objects.xml (nonexistent)
+++ trunk/cljs/sections/objects.xml (revision 25)
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Objects" ID="objects">
+ <CONTENT TITLE="What is a native object?" ID="nativeObject">
+ <P>
+ A <DFN>native object</DFN> is any object whose semantics are fully defined by
+ ECMA-262.
+ </P>
+ <P>
+ Some <DFN>native objects</DFN> are <DFN>built-in</DFN>; others, such as <DFN>user-defined</DFN> objects,
+ may be constructed during the execution of an ECMAScript program.
+ </P>
+ <P>
+ Example:
+ </P>
+ <CODE>
+// Native built-in objects:
+var m = Math, // Built-in Math object.
+ slice = Array.prototype.slice, // Built-in native method.
+ o = {}, // Native user-defined object.
+ f = function(){}, // Native user-defined function.
+ d = new Date(),
+ a = [],
+ e = new Error("My Message.");
+ </CODE>
+ See also:
+ <MOREINFO>
+ <URL>http://dmitrysoshnikov.com/ecmascript/chapter-7-2-oop-ecmascript-implementation/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="What is a built-in object?" ID="builtInObject">
+ <P>
+ A <DFN>built-in</DFN> object is any object supplied by an ECMAScript
+ implementation, independent of the host environment, that is present
+ at the start of the execution of an ECMAScript program.
+ </P>
+ <P>
+ ECMA-262 3rd Edition defines the following <DFN>built-in</DFN> objects:
+ </P>
+ <LIST TYPE="DL" ID="builtInsList">
+ <DT>Objects</DT>
+ <DD><EM>global</EM>, Math</DD>
+
+ <DT>Constructors</DT>
+ <DD>Object, Function, Array, String, Boolean, Number, Date, RegExp</DD>
+
+ <DT>Errors</DT>
+ <DD>Error, Date, EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError</DD>
+
+ <DT>Functions</DT>
+ <DD>eval, parseInt, parseFloat, isNaN, isFinite, decodeURI,
+ decodeURIComponent, encodeURI, encodeURIComponent</DD>
+ </LIST>
+ <P>
+ ECMA-262 Edition 5 defines also the built-in object <ICODE>JSON</ICODE>.
+ </P>
+ <P>
+ Nonstandard <DFN>built-in</DFN> objects may include <ICODE>RuntimeObject</ICODE>,
+ <ICODE>String.prototype.link</ICODE>, <ICODE>CollectGarbage</ICODE>, and more.
+ </P>
+ </CONTENT>
+
+ <CONTENT TITLE="What is a host object?" ID="hostObject" NUMID="2_8">
+ <P>
+ A <DFN>host object</DFN> is any object supplied by the host environment to
+ complete the execution environment of ECMAScript.
+ </P>
+ <P>
+ A <DFN>host object</DFN> is not part of the ECMAScript implementation, but is
+ exposed to the ECMAScript implementation.
+ </P>
+ <P>
+ A <DFN>host object</DFN> may be implemented as a native ECMAScript object, however
+ this is not required. For example, Internet Explorer implements many
+ scriptable DOM objects as ActiveX Objects, often resulting in unexpected errors.
+ </P>
+ <P>
+ Availability and behavior of a host object depends on the host environment.
+ </P>
+ <P>
+ For example, in a browser, <ICODE>XMLHttpRequest</ICODE> might be available, with or
+ without standard or proprietary features or events. Windows Script Host object model
+ has the <ICODE>WScript</ICODE> object available.
+ </P>
+ <P>
+ For information on a particular host object, consult the pertinent
+ documentation available for the implementation(s). For web browsers,
+ this usually includes the w3c specifications as well as documentation
+ for that browser.
+ See also:
+ </P>
+
+ <MOREINFO>
+ <URL>notes/code-guidelines/#hostObjects</URL>
+ <URL>http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="When should I use eval?" ID="eval" NUMID="4_40">
+ <P>
+The <ICODE>eval</ICODE> function should <EM>only</EM> be used when it is necessary to
+evaluate a string supplied or composed at run-time; the string
+can be anything from a simple (but unpredictable) expression such
+as <ICODE>"12 * 2.54"</ICODE> to a substantial piece of javascript code.
+</P>
+<P>
+When <ICODE>eval( '{"key" : 42}' )</ICODE> is called, <ICODE>{</ICODE> is interpreted as a block of
+code instead of an object literal. Hence, the Grouping Operator (parentheses)
+is used to force <ICODE>eval</ICODE> to interpret the JSON as an object literal:
+<ICODE>eval( '({"key" : 42})' );</ICODE>.
+ </P>
+ <MOREINFO>
+ <URL>http://json.org/</URL>
+ <URL LINKTEXT="How do I access a property of an object using a string?"
+ >#propertyAccessAgain</URL>
+ <URL>notes/square-brackets/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I access a property of an object using a string?" ID="propertyAccessAgain" NUMID="4_39">
+ <P>
+ There are two ways to access properties: dot notation and square bracket
+ notation. What you are looking for is the square bracket notation in
+ which the dot, and the identifier to its right, are replaced with a set
+ of square brackets containing a string. The value of the string matches
+ the identifier. For example:-
+ </P>
+ <CODE>
+//dot notation
+var bodyElement = document.body;
+
+//square bracket notation, using an expression
+var bodyElement = document[&quot;bo&quot;+&quot;dy&quot;];
+ </CODE>
+ <MOREINFO>
+ <URL>notes/square-brackets/</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/objects.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/strings.xml
===================================================================
--- trunk/cljs/sections/strings.xml (nonexistent)
+++ trunk/cljs/sections/strings.xml (revision 25)
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Strings and RegExp" ID="strings">
+ <CONTENT TITLE="How do I trim whitespace?" ID="trimString" NUMID="4_16">
+ <P>
+ ECMAScript 5 defines <ICODE>String.prototype.trim</ICODE>. Where not supported,
+ it can be added as a function that uses a <DFN>regular expression</DFN>:
+ </P>
+ <CODE>
+if(!String.prototype.trim) {
+ String.prototype.trim = function() {
+ return String(this).replace(/^\s+|\s+$/g, "");
+ };
+}
+ </CODE>
+ <P>
+ Implementations are inconsistent with <ICODE>\s</ICODE>. For example,
+ some implementations, notably JScript 5.8 and Safari 2, do not match <ICODE>\xA0</ICODE>
+ (no-break space), among others.</P>
+ <P>
+ A more consistent approach would be to create a character class
+ that defines the characters to trim.
+ </P>
+ <MOREINFO>
+ <URL>https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/RegExp</URL>
+ <URL>http://thinkweb2.com/projects/prototype/whitespace-deviations/</URL>
+ <URL>https://developer.mozilla.org/en/Firefox_3.1_for_developers</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/regexp.htm</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/6wzad2b2%28VS.85%29.aspx</URL>
+ <URL>http://groups.google.com/group/comp.lang.javascript/browse_frm/thread/c7010139217600c3/31092c5eb99625d0?#31092c5eb99625d0</URL>
+ <URL>http://unicode.org/Public/UNIDATA/PropList.txt</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/strings.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/resources.xml
===================================================================
--- trunk/cljs/sections/resources.xml (nonexistent)
+++ trunk/cljs/sections/resources.xml (revision 25)
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Javascript Resources" ID="ecmascriptResources" NUMID="3">
+ <CONTENT TITLE="What books are recommended for javascript?" ID="books" NUMID="3_1">
+ <P>
+ Most javascript books have been found to contain so many technical
+ errors that consensus recommendations have not emerged from the group.
+ </P>
+ <P>
+ The following books have been considered to have value by some
+ individuals on c.l.js. The reviews of these books are provided:
+ </P>
+ <LIST TYPE="UL">
+ <LI><EM>&quot;JavaScript: The Definitive Guide,&quot;</EM> 5th Edition, by David Flanagan
+ <UL>
+ <LI>Published: 2006-08</LI>
+ <LI>Pages: 1018</LI>
+ <LI>Errata: <URL>http://oreilly.com/catalog/9780596101992/errata/</URL></LI>
+ <LI>Discussed in:
+ <UL>
+ <LI>
+ <URL LINKTEXT="FAQ Update 9.85 Dated 2007-08-31"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/7283898f77fd2a66/9252aa024e058dea#c5f145ae807c918e</URL>
+ </LI>
+ </UL>
+ </LI>
+ </UL>
+ </LI>
+ <LI>
+ <EM>"JavaScript, The Good Parts,"</EM> 1st Edition, by Douglas Crockford
+ <UL>
+ <LI>Published: 2008-05</LI>
+ <LI>Pages: 170</LI>
+ <LI>Errata: <URL>http://oreilly.com/catalog/9780596517748/errata/</URL></LI>
+ <LI>Discussed in:
+ <UL>
+ <LI>
+ <URL LINKTEXT="Crockford's 'The Good Parts': a short review"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/d084d2109f7b4ec7#</URL>
+ </LI>
+ <LI>
+ <URL LINKTEXT="FunctionExpression's and memory consumptions"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/db1e49ab113aa05c/3987eac87ad27966#3987eac87ad27966</URL>
+ </LI>
+ <LI>
+ <URL LINKTEXT="FAQ Topic - What books are recommended for javascript? (2008-12-02)"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/6a41f7835ee728de/da5ccfc65e2df64a#da5ccfc65e2df64a</URL>
+ </LI>
+ <LI>
+ <URL LINKTEXT="Augmenting functions"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/3a08fb741525ab6d/</URL>
+ </LI>
+
+ <LI>
+ <URL LINKTEXT="Crockford's JavaScript, The Good Parts (a book review)."
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/bf26be6e63494ee2/acb733a1c35f6ce5#ee9e4ee29e658d5d</URL>
+ </LI>
+ <LI>
+ <URL LINKTEXT="Closures Explained"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/df602506ee48b400/e65e00f5cad07676#e65e00f5cad07676</URL>
+ </LI>
+ <LI>
+ <URL LINKTEXT="Javascript library development"
+ >http://groups.google.com/group/comp.lang.javascript/browse_thread/thread/acadf1b22b219433/4f69a95607d0b3ae#4f69a95607d0b3ae</URL>
+ </LI>
+ </UL></LI>
+ </UL>
+ </LI>
+ </LIST>
+ </CONTENT>
+
+ <CONTENT TITLE="What online resources are available?" ID="onlineResources" NUMID="3_2">
+ <LIST TITLE="ECMAScript" TYPE="DL" ID="ecmaResources">
+ <DT>The Official ECMAScript Specification</DT>
+ <DD><URL>[ECMA-262] http://www.ecma-international.org/publications/standards/Ecma-262-arch.htm</URL></DD>
+
+ <DT>[ISO16262] ISO/IEC 16262, Second Edition 2002-06-01 : ISO Standard matching
+ ECMA-262 3rd Edition, with corrections.</DT>
+ <DD><URL>http://standards.iso.org/ittf/PubliclyAvailableStandards/c033835_ISO_IEC_16262_2002(E).zip</URL></DD>
+
+ <DT>[MS-ES3]: Internet Explorer ECMA-262 ECMAScript Language Specification Standards Support</DT>
+ <DD><URL>http://msdn.microsoft.com/en-us/library/ff520996%28VS.85%29.aspx</URL></DD>
+ <DD><URL>res/%5BMS-ES3%5D.pdf</URL> (local alias)</DD>
+
+ <DT>[MS-ES3EX]: Microsoft JScript Extensions to the ECMAScript Language Specification Third Edition</DT>
+ <DD><URL>http://msdn.microsoft.com/en-us/library/ff521046%28VS.85%29.aspx</URL></DD>
+ <DD><URL>res/%5BMS-ES3EX%5D.pdf</URL> (local alias)</DD>
+
+ <DT>ECMAScript on Wikipedia</DT>
+ <DD><URL>http://en.wikipedia.org/wiki/ECMAScript</URL></DD>
+ </LIST>
+
+ <LIST TITLE="W3C DOM" TYPE="DL" ID="domResources">
+ <DT>DOM Level 1 ECMAScript Binding</DT>
+ <DD><URL>http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html</URL></DD>
+
+ <DT>DOM Level 2 ECMAScript Binding</DT>
+ <DD><URL>http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html</URL></DD>
+
+ <DT>DOM Level 2 Events</DT>
+ <DD><URL>http://www.w3.org/TR/DOM-Level-2-Events/events.html</URL></DD>
+
+ <DT>DOM Level 2 Style</DT>
+ <DD><URL>http://www.w3.org/TR/DOM-Level-2-Style/</URL></DD>
+
+ <DT>DOM Level 3 ECMAScript Binding</DT>
+ <DD><URL>http://www.w3.org/TR/DOM-Level-3-Core/ecma-script-binding.html</URL></DD>
+ </LIST>
+
+ <LIST TITLE="Browser Documentation" TYPE="DL" ID="browserResources">
+ <DT>Mozilla</DT>
+ <DD>JavaScript: <URL>http://developer.mozilla.org/en/docs/JavaScript</URL></DD>
+ <DD>Gecko DOM Reference: <URL>http://developer.mozilla.org/en/docs/Gecko_DOM_Reference</URL></DD>
+
+ <DT>Microsoft</DT>
+ <DD>HTML and DHTML Reference: <URL>http://msdn.microsoft.com/en-us/library/ms533050.aspx</URL></DD>
+ <DD>JScript Language Reference:<URL>http://msdn.microsoft.com/en-us/library/hbxc2t98%28VS.85%29.aspx</URL></DD>
+ <DD>Scripting: <URL>http://msdn.microsoft.com/en-us/library/ms950396.aspx</URL></DD>
+
+ <DT>Opera</DT>
+ <DD>Web Specifications Support: <URL>http://www.opera.com/docs/specs/#ecmascript</URL></DD>
+
+ <DD>JavaScript Support: <URL>http://www.opera.com/docs/specs/js/</URL></DD>
+ <DD>ECMAScript Support: <URL>http://www.opera.com/docs/specs/js/ecma</URL></DD>
+
+ <DT>BlackBerry JavaScript Reference</DT>
+ <DD><URL>http://docs.blackberry.com/en/developers/deliverables/11849/</URL></DD>
+
+ <DT>ICab InScript</DT>
+ <DD><URL>http://www.muchsoft.com/inscript/</URL></DD>
+
+ <DT>Apple Safari</DT>
+ <DD>Web Content Guide: <URL>http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/Introduction/Introduction.html</URL></DD>
+
+ <DT>Webkit</DT>
+ <DD>Project Site: <URL>http://webkit.org/</URL></DD>
+ <DD>Wiki: <URL>http://trac.webkit.org/wiki</URL></DD>
+ <DD>DOM Reference: <URL>http://developer.apple.com/Mac/library/documentation/AppleApplications/Reference/WebKitDOMRef/index.html#//apple_ref/doc/uid/TP40006089</URL></DD>
+
+ <DT>Netscape 4 Client-Side JavaScript Reference</DT>
+ <DD><URL>http://docs.sun.com/source/816-6408-10/</URL></DD>
+
+ <DT>Archived documentation for MSIE 3.x</DT>
+ <DD><URL>http://members.tripod.com/%7Ehousten/download/</URL></DD>
+ </LIST>
+
+ <LIST TITLE="Standalone ECMAScript Implementations" TYPE="DL" ID="standaloneImplementations">
+ <DT>Rhino: An open-source implementation of JavaScript written in Java</DT>
+ <DD><URL>http://www.mozilla.org/rhino/</URL></DD>
+
+ <DT>Besen IDE: ECMAScript Edition 5 with IDE</DT>
+ <DD><URL>http://besen.sourceforge.net/</URL></DD>
+
+ <DT>V8: Google's open source JavaScript engine</DT>
+ <DD><URL>http://code.google.com/p/v8/</URL></DD>
+
+ <DT>SpiderMonkey: Mozilla's C implementation of JavaScript</DT>
+ <DD><URL>http://www.mozilla.org/js/spidermonkey/</URL></DD>
+
+ <DT>Digital Mars DMD Script, console and MS Active Script implementation of ECMAScript</DT>
+ <DD><URL>http://www.digitalmars.com/dscript/</URL></DD>
+ </LIST>
+
+ <LIST TITLE="Other ECMAScript Implementations" TYPE="DL" ID="nonBrowserResources">
+ <DT>Developing Dashboard Widgets: Apple Developer Connection</DT>
+ <DD><URL>http://developer.apple.com/macosx/dashboard.html</URL></DD>
+
+ <DT>Whitebeam Apache Module: Server Side JavaScript in Apache</DT>
+ <DD><URL>http://www.whitebeam.org/</URL></DD>
+ </LIST>
+ </CONTENT>
+
+ <CONTENT TITLE="Javascript Libraries" ID="libraryResources">
+ <P>
+ No javascript libraries are endorsed by this group. If you want help
+ with using a library, visit that library's discussion group instead.
+ </P>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/resources.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/suggestions.xml
===================================================================
--- trunk/cljs/sections/suggestions.xml (nonexistent)
+++ trunk/cljs/sections/suggestions.xml (revision 25)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Comments and Suggestions" ID="comments" NUMID="5">
+ <P HTMLONLY="true">
+ This FAQ uses the CSS stylesheet <URL>faq.css</URL> and is generated
+ from the XML source <URL>index.xml</URL> using the XSLT stylesheet
+ <URL>index.xsl</URL><!-- which also checks the links -->.
+ </P>
+ <CONTENT TITLE="Why do some posts have &lt;FAQENTRY&gt; in them?" ID="FAQENTRY" NUMID="5_1">
+ <P>
+ If a poster feels that the question they are answering should be
+ covered in the FAQ, placing &lt;FAQENTRY&gt; in the post lets the FAQ
+ robot collect the messages for easy review and inclusion. A Draft Proposal
+ for the FAQ is requested and appreciated.
+ </P>
+ <P>
+The &lt;FAQENTRY&gt; should not be used in posts except in
+conjunction with a suggestion/proposal for this FAQ. It should
+also not be literally quoted in replies, instead it should be
+partly obscured as, e.g. &lt;FAQ**TRY&gt; or similar.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="How do I make a suggestion?" NUMID="5_2" ID="makeSuggestion">
+ <P>
+To make a suggestion to this FAQ, use either the FAQENTRY method
+above, or e-mail Thomas 'PointedEars' Lahn &lt;cljs&#64;PointedEars.de&gt; (editor).
+All comments, suggestions, and especially corrections are welcome.
+ </P>
+ </CONTENT>
+ <!-- FIXME -->
+ <!--
+ <P>
+ This FAQ is (C) Copyright Contributors on behalf of the
+ newsgroup comp.lang.javascript. Upon change of the FAQ maintainer,
+ the copyright will automatically pass over to the new maintainer.
+ </P>
+ -->
+ </CONTENT>
\ No newline at end of file
/trunk/cljs/sections/suggestions.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/windows.xml
===================================================================
--- trunk/cljs/sections/windows.xml (nonexistent)
+++ trunk/cljs/sections/windows.xml (revision 25)
@@ -0,0 +1,483 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Windows and Frames" ID="windows">
+ <P>
+ The <ICODE>window</ICODE> object (also referred to by <ICODE>self</ICODE>) is "DOM Level 0".
+ No formal standard for it exists.
+ </P>
+ <CONTENT TITLE="How can I disable the back button in a web browser?" ID="disableBackButton" NUMID="4_2">
+ <P>
+ You can't. The browser's history cannot be modified. However, you
+ can use <ICODE>self.location.replace(url);</ICODE> in some browsers to replace
+ the current page in the history.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms536712%28VS.85%29.aspx</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/location.htm#1194240</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I access a frame's content?"
+ ID="frameRef" NUMID="4_8">
+ <P>
+ To reference another frame on the <EM>same domain</EM>:
+ </P>
+ <P>
+ The <DFN>content window</DFN> of a <ICODE>FRAME</ICODE> or <ICODE>IFRAME</ICODE> can be
+ accessed by the <ICODE>frames</ICODE> collection.
+ </P>
+ <P>
+ Example:
+ </P>
+ <CODE>
+var fwin;
+fwin = self.frames[0]; // or:
+fwin = self.frames["iframeName"];
+ </CODE>
+ <P>or, from the <ICODE>IFRAME</ICODE> or <ICODE>FRAME</ICODE> element:</P>
+ <CODE>
+var iframeEl = document.getElementById("myFrame");
+var fwin = iframeEl.contentWindow; // Nonstandard, but widely supported.
+var fdoc = iframeEl.contentDocument; // DOM2 HTML Standard.
+ </CODE>
+ <P>
+ A global identifier <ICODE>moomin</ICODE> in the the iframe's <DFN>content window</DFN>
+ is accessed as <ICODE>fwin.moomin</ICODE>.
+ </P>
+ <P>
+ To communicate between frames on <EM>different</EM> domains:
+ </P>
+ <P>
+ Where supported, (IE8, Firefox 3, Opera 9, Safari 4), use
+ <ICODE>window.postMessage( message[, port], otherDomain);</ICODE>.
+ </P>
+ <P>
+ Example:
+ <URL>http://jibbering.com/faq/example/postMessage.html</URL>
+ </P>
+ <P>
+ Where <ICODE>window.postMessage</ICODE> is not supported, the <ICODE>window.name</ICODE> property
+ can be set on the other window, which can poll for updates to that
+ property using <ICODE>setInterval(checkWinName, 100);</ICODE> where <ICODE>checkWinName</ICODE>
+ is a function that polls to check the value of
+ <ICODE>self.name</ICODE>.
+ </P>
+ <MOREINFO>
+ <URL>http://en.wikipedia.org/wiki/Same_origin_policy</URL>
+ <URL>http://www-archive.mozilla.org/docs/dom/domref/dom_frame_ref5.html</URL>
+ <URL>https://developer.mozilla.org/en/DOM/window.postMessage</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/cc197015(VS.85).aspx</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I find the size of the window?" ID="getWindowSize"
+ NUMID="4_9">
+ <P>
+ Here is a detailed explanation of a cross-browser strategy to
+ find the dimensions of the viewport, excepting all chrome
+ (excludes scrollbars, etc).
+ </P>
+ <P>
+ We can consider various properties:
+ </P>
+ <CODE>
+window.innerWidth
+document.clientWidth
+document.documentElement.clientWidth
+document.body.clientWidth
+ </CODE>
+ <P>
+ Of the browsers that have an <ICODE>innerWidth</ICODE> property, most
+ include scrollbar dimensions. Some versions of KHTML browsers
+ (including Safari 2) do <EM>not</EM> include scrollbar width.
+ </P>
+
+ <P>
+ The <ICODE>window.inner*</ICODE> properties are unreliable and not
+ useful here. We don't want scrollbar dimensions included.
+ </P>
+<CODE> document.clientWidth</CODE>
+ <P>
+ Certain versions of KHTML, including Safari 2, have
+ <ICODE>document.clientHeight</ICODE> and <ICODE>document.clientWidth</ICODE>
+ properties. Where supported, these rare properties accurately
+ return the height and width of the viewport, without including
+ scrollbar dimensions.
+ </P>
+ <CODE>
+document.documentElement.clientWidth
+document.body.clientWidth
+ </CODE>
+ <P>
+ MSHTML (Trident), Firefox (Gecko), Opera (Presto), and Safari
+ (Webkit) all support <ICODE>clientHeight</ICODE> on <ICODE>document.body</ICODE>
+ and <ICODE>document.documentElement</ICODE>. The difficulty is figuring out
+ which one is reliable. In other words which object to get the
+ <ICODE>clientHeight</ICODE> property from:<ICODE>documentElement</ICODE> or <ICODE>body</ICODE>?
+ </P>
+
+ <P>
+ What the number returned from either of these properties
+ represents depends on the environment. The environment includes
+ the browser, its version, and the rendering mode of the document.
+ In quirks mode, we'll mostly want to use <ICODE>body.clientHeight</ICODE>
+ (except for in Safari 2).
+ </P>
+ <CODE>document.body.clientHeight</CODE>
+ <P>
+ Some environments will return the viewport height. Others will
+ return <ICODE>0</ICODE>. Yet others will return the <ICODE>clientHeight</ICODE> of
+ the <ICODE>BODY</ICODE> element.
+ </P>
+ <CODE> document.documentElement.clientHeight</CODE>
+ <P>
+ This is the more "standard" property for getting the height of
+ the viewport. It usually "works" in modern browsers in
+ <DFN>standards mode</DFN>. Notable exceptions include Safari 2 and
+ Opera &lt;= 9.25, both of which return the <ICODE>clientHeight</ICODE>
+ of the <ICODE>html</ICODE> <EM>element</EM>. (Oddly, Opera &lt;= 9.25
+ in standards mode returns the width of the viewport for
+ <ICODE>documentElement.clientWidth</ICODE>).
+ </P>
+ <P>
+ With the exception of Safari 2, <ICODE>body.clientHeight</ICODE> is reliable
+ where <ICODE>documentElement.clientHeight</ICODE> is found to be unreliable.
+ For example, in Safari 3+, Opera, and Mozilla, all in quirks mode,
+ <ICODE>document.documentElement.clientHeight</ICODE> returns the <ICODE>clientHeight</ICODE>
+ of the <ICODE>html</ICODE> element (this may seem unsurprising but
+ it is not what we want).
+ </P>
+ <P>
+ Conversely, <ICODE>document.body.clientHeight</ICODE> will return
+ the height of the viewport in most cases where
+ <ICODE>document.documentElement.clientHeight</ICODE> does not. An exception
+ to that is Safari 2, where <ICODE>documentElement.clientHeight</ICODE>
+ and <ICODE>body.clientHeight</ICODE> both return the height of their
+ corresponding element (not what we want).
+ </P>
+ <P>
+ By using a combination of <DFN>Feature Testing</DFN> and <DFN>Capability Testing</DFN>,
+ the dimensions of the viewport can be strategically retrieved
+ from the property that works in the environment the script is
+ running in. The trick is determining which property will give us
+ the value we want.
+ </P>
+ <P>
+ Since <ICODE>document.clientHeight</ICODE> is reliable where
+ (rarely) supported, and since browsers that support this property
+ don't return the viewport dimensions from
+ <ICODE>document.body.clientHeight</ICODE> or
+ <ICODE>document.documentElement.clientHeight</ICODE>, this should be the
+ very first condition:
+ </P>
+ <CODE>
+// Safari 2 uses document.clientWidth (default).
+if(typeof document.clientWidth == "number") {
+ // use document.clientWidth.
+}
+ </CODE>
+ <P>
+ The next strategy is to determine if
+ <ICODE>document.documentElement.clientHeight</ICODE> property is unreliable.
+ It is deemed "unreliable" when it is either <ICODE>0</ICODE> or taller
+ than the viewport.
+ </P>
+ <P>
+ Determining if <ICODE>documentElement.clientHeight</ICODE> is <ICODE>0</ICODE> is easy.
+ The result is stored in a variable <ICODE>IS_BODY_ACTING_ROOT</ICODE>.
+ </P>
+ <CODE>
+var docEl = document.documentElement,
+ IS_BODY_ACTING_ROOT = docEl &amp;&amp; docEl.clientHeight === 0;
+docEl = null;
+ </CODE>
+ <P>
+ To determine if <ICODE>documentElement.clientHeight</ICODE> returns
+ a value taller than the viewport, we need a <DFN>Capability Test.</DFN>
+ </P>
+ <P>
+ If we can force <ICODE>documentElement</ICODE> to be very tall
+ (taller than a normal viewport) we can then check to see if
+ <ICODE>documentElement.clientHeight</ICODE> returns that "very tall" number.
+ If it does, then it is unreliable.
+ </P>
+ <P>
+ We can force <ICODE>documentElement</ICODE> to be taller than the viewport
+ (or any "normal" viewport) by adding a <ICODE>div</ICODE> to the <ICODE>body</ICODE>,
+ give that <ICODE>div</ICODE> a height larger than any normal monitor,
+ and then check to see if <ICODE>documentElement.clientHeight</ICODE> is
+ that high (or "almost" that high, to account for <ICODE>documentElement</ICODE>
+ having a border).
+ </P>
+ <CODE>
+// Used to feature test Opera returning wrong values
+// for documentElement.clientHeight.
+// The results of this function should be cached,
+// so it does not need to be called more than once.
+function isDocumentElementHeightOff(){
+ var d = document,
+ div = d.createElement('div');
+ div.style.height = "2500px";
+ d.body.insertBefore(div, d.body.firstChild);
+ var r = d.documentElement.clientHeight &gt; 2400;
+ d.body.removeChild(div);
+ return r;
+}
+ </CODE>
+ <P>
+ We can use this function to see if we should use
+ <ICODE>body.clientHeight</ICODE>, instead. (but only after checking if
+ <ICODE>document.clientHeight</ICODE> is supported).
+ </P>
+ <CODE>
+// Safari 2 uses document.clientWidth (default).
+if(typeof document.clientWidth == "number") {
+ // use document.clientHeight/Width.
+}
+else if(IS_BODY_ACTING_ROOT || isDocumentElementHeightOff()) {
+ // use document.body.clientHeight/Width.
+} else {
+ // use document.documentElement.clientHeight/Width.
+}
+ </CODE>
+ <P>
+ The preceding strategy was developed by Garrett Smith with input
+ from John David Dalton. A complete and tested example can be found
+ in APE Library under <ICODE>APE.dom.getViewportDimensions</ICODE>.
+ Source code:
+ <URL>http://dhtmlkitchen.com/ape/build/dom/viewport-f.js</URL>.
+ APE is publicly released under Academic Free License.
+ APE home: <URL>http://dhtmlkitchen.com/ape/</URL>.
+ </P>
+ <P>
+ Note: The dimensions cannot be determined accurately until after
+ the document has finished loading.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms533566%28VS.85%29.aspx</URL>
+ <URL>http://developer.mozilla.org/en/DOM/window.innerWidth</URL>
+ <URL>http://dev.opera.com/articles/view/using-capability-detection/</URL>
+ </MOREINFO>
+ </CONTENT>
+
+ <CONTENT TITLE="How do I check to see if a child window is open, before opening another?"
+ ID="isWindowOpen" NUMID="4_10">
+ <CODE>
+var myWin;
+function openWin(aURL) {
+ if (!myWin || myWin.closed ) {
+ myWin = window.open(aURL,'myWin');
+ } else {
+ myWin.location.href = aURL;
+ myWin.focus();
+ }
+}
+ </CODE>
+ <P>
+ Popup windows cause usability problems and are generally best avoided.
+ </P>
+ <MOREINFO>
+ <URL>https://developer.mozilla.org/en/DOM:window.open</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/ms533574%28VS.85%29.aspx</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/window.htm#1201877</URL>
+ <URL>http://www.useit.com/alertbox/990530.html</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Why does framename.print() not print the correct frame in IE?"
+ ID="printFrame" NUMID="4_11">
+ <P>
+ IE prints the frame that has focus when you call the print
+ method <ICODE>frameref.focus();frameref.print();</ICODE>
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms976105.aspx</URL>
+ </MOREINFO>
+ </CONTENT>
+
+ <CONTENT TITLE="How do I close a window and why does it not work on the first one?"
+ ID="windowClose" NUMID="4_14">
+ <P>
+ If a window was opened by javascript, then it can be closed
+ without confirmation by using <ICODE>windowRef.close()</ICODE>.
+ </P>
+ <P>
+ Before calling <ICODE>windowRef.close()</ICODE> (or other <ICODE>window</ICODE> methods), make
+ sure the window reference is not null and its <ICODE>closed</ICODE> property is <ICODE>false</ICODE>.
+ </P>
+ <P>
+ Popup windows cause usability problems and are generally best avoided.
+ </P>
+ <MOREINFO>
+ <URL>http://www.useit.com/alertbox/990530.html</URL>
+ <URL>#isWindowOpen</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/ms536367%28VS.85%29.aspx</URL>
+ <URL>https://developer.mozilla.org/en/DOM/window.close#Description</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/window.htm#1201822</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Why do I get permission denied when accessing a frame/window?"
+ ID="permissionDenied" NUMID="4_19">
+ <P>
+ In the normal browser security model, a script may only access the
+ properties of documents served from the same domain or IP address,
+ protocol, and port.
+ </P>
+ <P>
+ Any attempt to access a property in such cases will result in a &quot;Permission
+ Denied&quot; error. Signed scripts or trusted ActiveX objects can
+ overcome this in limited situations.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms533028%28VS.85%29.aspx</URL>
+ <URL>https://developer.mozilla.org/En/Same_origin_policy_for_JavaScript</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I make a 10 second delay?" ID="setTimeout" NUMID="4_20">
+ <P>
+ There is no built-in way to pause execution in javascript such
+ as a sleep function, but hosts usually provide a method of some
+ form. Web browsers are designed for event driven programming and
+ only provide the <ICODE>setTimeout</ICODE> and <ICODE>setInterval</ICODE> functions
+ to facilitate timed delays. The delay before calling <ICODE>getSnork</ICODE> may
+ exceed the second parameter to <ICODE>setTimeout</ICODE> and <ICODE>setInterval</ICODE>
+ due to implementation differences among browsers.
+ </P>
+ <P>
+ To call the function <ICODE>getSnork</ICODE>, approximately 10 seconds
+ after the function <ICODE>getMoomin()</ICODE> completes, you would do this:
+ </P>
+ <CODE>
+getMoomin();
+setTimeout(getSnork, 10000);
+ </CODE>
+ <P>
+ Script execution is not stopped, and adding <ICODE>getSnufkin()</ICODE> after the
+ <ICODE>setTimeout</ICODE> line would immediately execute the function <ICODE>getSnufkin</ICODE>
+ before <ICODE>getSnork</ICODE>.
+ </P>
+ <P>
+ Achieving delays through running a loop of some sort for a pre-defined
+ period is a bad strategy, as that will inhibit whatever was supposed to
+ be happening during the delay, including blocking user interation.
+ </P>
+ <P>
+ Other (less event driven) hosts have different wait functions,
+ such as <ICODE>WScript.Sleep()</ICODE> in the Windows Script Host.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms536753%28VS.85%29.aspx</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/window.htm#1203758</URL>
+ <URL>http://en.wikipedia.org/wiki/Event-driven_programming</URL>
+ <URL>faq_notes/misc.html#mtSetTI</URL>
+ </MOREINFO>
+ </CONTENT>
+
+ <CONTENT TITLE="How do I change print settings for window.print()?"
+ ID="printSettings" NUMID="4_23">
+ <P>
+ In a normal security environment, you can't change anything.
+ </P>
+ <P>
+ Print Stylesheet rules provide options.
+ </P>
+ <P>
+ For IE, <ICODE>ActiveX</ICODE> or Plugin ScriptX and
+ Neptune from Meadroid to give you more control for Windows
+ versions of Internet Explorer, Netscape, and Opera.
+ </P>
+ <MOREINFO>
+ <URL>http://www.meadroid.com/scriptx/</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/ms976105.aspx</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I change the confirm box to say yes/no or default to cancel?"
+ ID="changeBrowserDialog" NUMID="4_28">
+ <P>
+ The buttons on a confirm box cannot be changed, nor can a default
+ button be specified.
+ </P>
+ <P>
+ Change the question to a statement so that "OK" is suitable as the
+ default response.
+ </P>
+ <P>
+ Example:
+ "Would you like us to charge your credit card?" (wrong)
+ "We will now charge your credit card." (right).
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="How do I prompt a &quot;Save As&quot; dialog for an accepted mime type?"
+ ID="fileDownload" NUMID="4_33">
+ <P>
+ It is not possible with client-side javascript.
+ </P>
+ <P>
+ Some browsers accept the Content-Disposition header, but this
+ must be added by the server. Taking the form:-
+ <ICODE>Content-Disposition: attachment; filename=filename.ext</ICODE>
+ </P>
+ <MOREINFO>
+ <URL>http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html</URL>
+ <URL>http://support.microsoft.com/kb/q260519/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <!-- Can we remove this entry?
+ http://groups.google.com/group/comp.lang.javascript/msg/c70b57d86300fa91
+
+ CONTENT TITLE="I have window.status=&quot;Moomin&quot;; why doesn't the statusbar change?"
+ ID="returnValue" NUMID="4_35">
+ <P>
+When changing the status in an event (e.g. <ICODE>onmouseover</ICODE>) you
+should return true from the event. Also a number of browsers
+require a short delay before setting the status to overcome their
+default behaviour with the statusbar.
+<ICODE>onevent=&quot;setTimeout('window.status=\'Moomin\'',15);&quot;</ICODE>
+ </P>
+ <P>
+Many browsers are configured, by default, to disallow scripts from setting
+the status bar text. Some browsers don't have such a bar, or don't have it by default.
+ </P>
+ </CONTENT-->
+
+ <CONTENT TITLE="How do I modify the current browser window?" ID="modifyChrome" NUMID="4_36">
+ <P>
+ In a default security environment you are very limited in how much
+ you can modify the current browser window. You can use
+ <ICODE>window.resizeTo</ICODE> or <ICODE>window.moveTo</ICODE> to resize or move a
+ window respectively, but that is it. Normally you can only
+ suggest chrome changes in a <ICODE>window.open</ICODE>.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms536651%28VS.85%29.aspx</URL>
+ <URL>https://developer.mozilla.org/en/DOM:window.open</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I POST a form to a new window?" ID="target" NUMID="4_37">
+ <P>
+ Use the target attribute on the form, opening a window with
+ that name and your feature string in the onsubmit handler of the
+ FORM.
+ </P>
+ <CODE>
+&lt;form action=&quot;&quot; method="post"
+ target=&quot;wndname&quot; onsubmit=&quot;window.open('',this.target);return true;&quot;&gt;
+ </CODE>
+ <MOREINFO>
+ <URL>http://www.htmlhelp.com/reference/html40/forms/form.html</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I open a new window with javascript?" ID="openWindow" NUMID="4_42">
+ <P>
+ New windows can be opened on browsers that support the
+ <ICODE>window.open</ICODE> function and are not subject to the action of any
+ pop-up blocking mechanism with code such as:-
+ </P>
+ <CODE>
+var wRef;
+if(window.open){
+ wRef = window.open("http://example.com/page.html","windowName");
+}
+ </CODE>
+ <MOREINFO>
+ <URL>https://developer.mozilla.org/en/DOM:window.open</URL>
+ <URL>http://www.infimum.dk/HTML/JSwindows.html</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/windows.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/debugging.xml
===================================================================
--- trunk/cljs/sections/debugging.xml (nonexistent)
+++ trunk/cljs/sections/debugging.xml (revision 25)
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Debugging" ID="debugging">
+ <CONTENT TITLE="How do I get my browser to report javascript errors?"
+ ID="javascriptErrors" NUMID="4_43">
+ <P>
+There are debugging tools for many browsers. Learn to use them all.
+ </P>
+ <LIST TYPE="DL">
+ <DT>Windows</DT>
+ <DD>
+<URL LINKTEXT="Fiddler">http://www.fiddlertool.com/fiddler/</URL>.
+Fiddler is an HTTP Debugging proxy (it won't find script
+errors). Fiddler logs HTTP activity, like Firebug's Net
+tab, but can be attached to any browser running on Windows.
+ </DD>
+ <DT>Windows IE</DT>
+ <DD>Microsoft Script Editor. Included with Visual Studio or Microsoft
+Word 2003 (discontinued in Office 2007).
+To enable,
+<ICODE>Tools</ICODE>, <ICODE>Internet Options</ICODE>, <ICODE>Advanced</ICODE>, and uncheck
+<ICODE>Disable Script Debugging</ICODE>. After enabling Script Debugging,
+a <ICODE>Script Debugger</ICODE> option will appear in the <ICODE>View</ICODE> menu.</DD>
+
+<DD><URL LINKTEXT="IETester">http://www.my-debugbar.com/wiki/IETester/HomePage</URL> for testing IE 5.5- IE8.</DD>
+<DD><URL LINKTEXT="CompanionJS">http://www.my-debugbar.com/wiki/CompanionJS/HomePage</URL> <ICODE>console</ICODE> for IE.</DD>
+ <DD>
+<EM>Note:</EM> For debugging scripts in IE, the Microsoft Script <EM>Editor</EM>
+is recommended. However, if not available, the <URL LINKTEXT="Microsoft Script Debugger"
+>http://www.microsoft.com/downloads/details.aspx?FamilyId=2F465BE0-94FD-4569-B3C4-DFFDF19CCD99&amp;displaylang=en</URL> may be somewhat helpful.
+ </DD>
+ <DD>
+<URL LINKTEXT="Internet Explorer Developer Toolbar"
+ >http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;displaylang=en</URL>
+ </DD>
+ <DD>
+To report errors: Wait until a little yellow
+triangle appears at the left end of the status bar, double click
+on it and, when the error dialog box appears, check the &quot;Always
+show errors&quot; checkbox it contains.
+
+Or, <ICODE>Internet Options</ICODE>, <ICODE>Advanced</ICODE>, deselect <ICODE>"Disable Script Debugging"</ICODE>,
+select <ICODE>"Display a notification ..."</ICODE>.
+ </DD>
+ <DT>Firefox</DT>
+ <DD>
+ <ICODE>Tools &gt; Error console</ICODE> (<ICODE>Ctrl</ICODE> + <ICODE>Shift</ICODE> + <ICODE>j</ICODE>).
+ </DD>
+ <DD>
+<URL LINKTEXT="Firebug">http://getfirebug.com/</URL>
+ </DD>
+ <DD>
+<URL LINKTEXT="YSlow">https://addons.mozilla.org/en-US/firefox/addon/5369</URL>.
+YSlow analyzes web pages and tells you why they're slow
+based on Yahoo's rules for high performance web sites.
+ </DD>
+ <DD>
+<URL LINKTEXT="Lori">https://addons.mozilla.org/en-US/firefox/addon/1743</URL>
+<DFN>Lori</DFN> or Life-of-request info, is useful for troubleshooting
+server response and page load time.
+ </DD>
+ <DD>
+<URL LINKTEXT="Web Developer Toolbar">https://addons.mozilla.org/en-US/firefox/addon/60</URL>.
+ </DD>
+ <DD>
+<URL LINKTEXT="Cookie Watcher">https://addons.mozilla.org/en-US/firefox/addon/1201</URL>.
+ </DD>
+ <DD>
+<URL LINKTEXT="XPather">https://addons.mozilla.org/en-US/firefox/addon/1192</URL>.
+XPath generator, editor and inspector.
+ </DD>
+ <DT>Opera</DT>
+ <DD>
+Tools &gt; Advanced &gt; Error console
+ </DD>
+ <DD>
+<URL LINKTEXT="Introduction to Opera Dragonfly"
+ >http://dev.opera.com/articles/view/introduction-to-opera-dragonfly/</URL>
+ </DD>
+ <DT>Safari</DT>
+ <DD>
+To display the <ICODE>Develop</ICODE> menu in Safari 3.1 or higher, select
+the checkbox labeled "Show Develop menu in menu bar" in
+Safari's <ICODE>Advanced</ICODE> Preferences panel.
+ </DD>
+ <DD>
+<URL LINKTEXT="Safari Web Inspector">http://trac.webkit.org/wiki/Web%20Inspector </URL>
+ </DD>
+ <DT>Chrome</DT>
+ <DD>
+JavaScript Console: click the <ICODE>Page</ICODE> menu icon and select
+<ICODE>Developer &gt; JavaScript Console</ICODE>. From here, you'll be
+able to view errors in the JavaScript execution, and enter
+additional javascript commands to execute.
+ </DD>
+ <DD>
+JavaScript Debugger: available as <ICODE>Page</ICODE> menu icon &gt; <ICODE>Developer</ICODE>
+&gt; Debug JavaScript, the debugger provides a command prompt from which you
+can set breakpoints, backtrace, and more. Type <ICODE>help</ICODE> at the debugger
+command line to get started.
+ </DD>
+ <DD>
+ <UL>
+ <LI><URL LINKTEXT="Google Chrome Script Debugging"
+ >http://www.google.com/chrome/intl/en/webmasters-faq.html#jsexec</URL></LI>
+ <LI><URL LINKTEXT="Developer Tools for Google Chrome"
+ >http://blog.chromium.org/2009/06/developer-tools-for-google-chrome.html</URL></LI>
+ <LI><URL LINKTEXT="Tools for Eclipse Users">http://blog.chromium.org/2009/08/google-chrome-developer-tools-for.html</URL></LI>
+ </UL>
+ </DD>
+ <DT>Mac IE</DT>
+ <DD>
+Use the Preferences dialog.
+ </DD>
+ </LIST>
+ </CONTENT>
+ </CONTENT>
\ No newline at end of file
/trunk/cljs/sections/debugging.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/numbers.xml
===================================================================
--- trunk/cljs/sections/numbers.xml (nonexistent)
+++ trunk/cljs/sections/numbers.xml (revision 25)
@@ -0,0 +1,180 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="Numbers" ID="numbers">
+ <CONTENT TITLE="How do I format a Number as a String with exactly 2 decimal places?" ID="formatNumber" NUMID="4_6">
+ <P>
+ When formatting money for example, to format 6.57634 to 6.58, 6.7 to
+ 6.50, and 6 to 6.00?
+ </P>
+ <P>
+ Rounding of x.xx5 is unreliable, as most numbers are not represented
+ exactly. See also:
+ <URL LINKTEXT="Why does simple decimal arithmetic give strange results?">#binaryNumbers</URL>
+ </P>
+ <P>
+ The statement <ICODE>n = Math.round(n * 100)/100</ICODE> converts <ICODE>n</ICODE> to a <ICODE>Number</ICODE> value
+ close to a multiple of <ICODE>0.01</ICODE>. However, there are some problems.
+ Converting the number to a string <ICODE>(n + "")</ICODE>, does not give
+ trailing zeroes. Rounding numbers that are very close to <ICODE>x.5</ICODE>, for example,
+ <ICODE>Math.round(0.49999999999999992)</ICODE> results <ICODE>1</ICODE>.
+ </P>
+ <P>
+ ECMA-262 3rd Edition introduced <ICODE>Number.prototype.toFixed</ICODE>.
+ There are bugs in JScript 5.8 and below with certain numbers, for example
+ <ICODE>0.007.toFixed(2)</ICODE> incorrectly results <ICODE>0.00</ICODE>.
+ </P>
+ <CODE>
+var numberToFixed =
+(function() {
+ return toFixedString;
+
+ function toFixedString(n, digits) {
+ var unsigned = toUnsignedString(Math.abs(n), digits);
+ return (n &lt; 0 ? "-" : "") + unsigned;
+ }
+
+ function toUnsignedString(m, digits) {
+ var t, s = Math.round(m * Math.pow(10, digits)) + "",
+ start, end;
+ if (/\D/.test(s)) {
+ return "" + m;
+ }
+ s = padLeft(s, 1 + digits, "0");
+ start = s.substring(0, t = (s.length - digits));
+ end = s.substring(t);
+ if(end) {
+ end = "." + end;
+ }
+ return start + end; // avoid "0."
+ }
+ /**
+ * @param {string} input: input value converted to string.
+ * @param {number} size: desired length of output.
+ * @param {string} ch: single character to prefix to s.
+ */
+ function padLeft(input, size, ch) {
+ var s = input + "";
+ while(s.length &lt; size) {
+ s = ch + s;
+ }
+ return s;
+ }
+})();
+
+// Test results
+document.writeln([
+ "numberToFixed(9e-3, 12) =&gt; " + numberToFixed(9e-3, 12),
+ "numberToFixed(1.255, 2) =&gt; " + numberToFixed(1.255, 2),
+ "numberToFixed(1.355, 2) =&gt; " + numberToFixed(1.355, 2),
+ "numberToFixed(0.1255, 3) =&gt; " + numberToFixed(0.1255, 3),
+ "numberToFixed(0.07, 2) =&gt; " + numberToFixed(0.07, 2),
+ "numberToFixed(0.0000000006, 1) =&gt; " + numberToFixed(0.0000000006, 1),
+ "numberToFixed(0.0000000006, 0) =&gt; " + numberToFixed(0.0000000006, 0)
+].join("\n"));
+ </CODE>
+ <MOREINFO>
+ <URL>http://www.merlyn.demon.co.uk/js-round.htm</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/sstyff0z%28VS.85%29.aspx</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Why does simple decimal arithmetic give strange results?" ID="binaryNumbers" NUMID="4_7">
+ <P>
+ For example, <ICODE>5 * 1.015</ICODE> does not give exactly
+ <ICODE>5.075</ICODE> and <ICODE>0.06+0.01</ICODE> does
+ not give exactly <ICODE>0.07</ICODE> in javascript.
+ </P>
+ <P>
+ ECMAScript numbers are represented in binary as IEEE-754 (IEC 559)
+ Doubles, with a resolution of 53 bits, giving an accuracy of
+ 15-16 decimal digits; integers up to just over <ICODE>9e15</ICODE> are
+ precise, but few decimal fractions are. Given this, arithmetic
+ is as exact as possible, but no more. Operations on integers
+ are exact if the true result and all intermediates are integers
+ within that range.
+ </P>
+ <P>
+ In particular, non-integer results should not normally be
+ compared for equality; and non-integer computed results
+ commonly need rounding; see <URL
+ LINKTEXT="How do I format a Number as a String with exactly 2 decimal places?"
+ >#formatNumber</URL>
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/7wkd9z69%28VS.85%29.aspx</URL>
+ <URL>http://www.merlyn.demon.co.uk/js-misc0.htm#DW4</URL>
+ </MOREINFO>
+ <P>
+ Otherwise, use <ICODE>Math.round</ICODE> on the results of expressions which
+ should be of integer value.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="Why does K = parseInt('09') set K to 0?" ID="parseIntBase" NUMID="4_12">
+ <P>
+ Method <ICODE>parseInt</ICODE> generally needs a second parameter, <ICODE>radix</ICODE>,
+ for the base (from 2 to 36).
+ </P>
+ <P>
+ If <ICODE>radix</ICODE> is omitted, the base is determined by the contents of
+ the string. Any string beginning with <ICODE>'0x'</ICODE> or <ICODE>'0X'</ICODE> represents a
+ hexadecimal number. A string beginning with a leading 0 may be parsed as
+ octal (as if <ICODE>raxix</ICODE> were 8), in ECMA-262 Ed 3 (octal digits are <ICODE>0-7</ICODE>).
+ If string <ICODE>'09'</ICODE> is converted to <ICODE>0</ICODE>.
+ </P>
+ <P>
+ To force use of a particular base, use the <ICODE>radix</ICODE>
+ parameter: <ICODE>parseInt("09", base)</ICODE>.
+
+ <!-- [omit]
+ If base 10 is desired,
+ the unary <ICODE>+</ICODE> operator can be an option. Example:
+ <ICODE>
+var s = '-09.1'; // Input string.
+var j = +s; // Convert to number. Result: -9.1
+var n = j|0; // Chop off decimal (convert ToInt32). Result: -9
+</ICODE>
+ [/omit] -->
+ </P>
+ <MOREINFO>
+ <URL>http://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Functions/parseInt</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/x53yedee%28VS.85%29.aspx</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/toplev.htm#1064173</URL>
+ <URL>notes/type-conversion/#tcPrIntRx</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Why does 1+1 equal 11? or How do I convert a string to a number?" ID="typeConvert">
+ <P>
+ Variables are not typed; their values are. The conversion between a
+ string and a number happens automatically.
+ </P>
+ <P>
+ The addition operator (<ICODE>+</ICODE>) performs concatenation if either operand is a
+ string, thus <ICODE>"1" + 1</ICODE> results <ICODE>"11"</ICODE>. To perform addition, you might need
+ to first convert the string to a number. For example <ICODE>+varname</ICODE> or
+ <ICODE>Number(varname)</ICODE> or <ICODE>parseInt(varname, 10)</ICODE> or
+ <ICODE>parseFloat(varname)</ICODE>. Form control values are strings, as is the result
+ from a <ICODE>prompt</ICODE> dialog. Convert these to numbers before performing
+ addition: <ICODE>+'1' + 1</ICODE> results <ICODE>2</ICODE>.
+ </P>
+ <MOREINFO>
+ <URL LINKTEXT="Additional Notes">notes/type-conversion/</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/67defydd%28VS.85%29.aspx</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I generate a random integer from 1 to n?" ID="randomNumber" NUMID="4_22">
+ <P>
+ <ICODE>Math.random()</ICODE> returns a value <ICODE>R</ICODE> such that <ICODE>0 &lt;= R &lt; 1.0</ICODE>; therefore:
+ </P>
+ <CODE>
+// positive integer expected
+function getRandomNumber(n) {
+ return Math.floor(n * Math.random());
+}
+ </CODE>
+ - gives an evenly distributed random integer in the range from
+ <ICODE>0</ICODE> to <ICODE>n - 1</ICODE> inclusive; use <ICODE>getRandomNumber(n)+1</ICODE> for <ICODE>1</ICODE> to <ICODE>n</ICODE>.
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/41336409%28VS.85%29.aspx</URL>
+ <URL>http://docs.sun.com/source/816-6408-10/math.htm</URL>
+ How to Deal and Shuffle, see in: <URL>http://www.merlyn.demon.co.uk/js-randm.htm</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/numbers.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/cljs/sections/dom.xml
===================================================================
--- trunk/cljs/sections/dom.xml (nonexistent)
+++ trunk/cljs/sections/dom.xml (revision 25)
@@ -0,0 +1,188 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<CONTENT TITLE="DOM and Forms" ID="domRef">
+ <CONTENT TITLE="How do I get the value of a form control?"
+ ID="formControlAccess" NUMID="4_13">
+ <P>
+ In HTML documents, a form may be referred to as a property of the
+ <ICODE>document.forms</ICODE> collection, either by its ordinal index or by name
+ (if the <ICODE>form</ICODE> has a name). A <ICODE>form</ICODE>'s controls may be similarly referenced
+ from its <ICODE>elements</ICODE> collection:
+ </P>
+ <CODE>
+var frm = document.forms[0];
+var control = frm.elements[&quot;elementname&quot;];
+ </CODE>
+ <P>
+ Once a reference to a control is obtained, its (string) <ICODE>value</ICODE>
+ property can be read:-
+ </P>
+ <CODE>
+var value = control.value;
+value = +control.value; //string to number.
+ </CODE>
+ Some exceptions would be:
+ <P>
+ First Exception: Where the control is a <ICODE>SELECT</ICODE> element, and
+ support for older browsers, such as NN4, is required:
+ </P>
+ <CODE>
+var value = control.options[control.selectedIndex].value;
+ </CODE>
+ <P>
+ Second Exception: Where several controls share the same name,
+ such as radio buttons. These are made available as collections
+ and require additional handling. For more information, see:-
+ </P>
+ <MOREINFO>
+ <URL>notes/form-access/</URL>
+ <URL LINKTEXT="Unsafe Names for HTML Form Controls">names/</URL>
+ </MOREINFO>
+ <P>
+ Third Exception: File inputs. Most current browsers do not allow
+ reading of <ICODE>type="file"</ICODE> input elements in a way that is useful.
+ </P>
+ </CONTENT>
+ <CONTENT TITLE="My element is named myselect[], how do I access it?" ID="propertyAccess" NUMID="4_25">
+ <P>
+Form controls with any &quot;illegal&quot; characters can be accessed with
+<ICODE>formref.elements[&quot;myselect[]&quot;]</ICODE> - The bracket characters,
+amongst others, are illegal in ID attributes and javascript
+identifiers, so you should try to avoid them as browsers may
+handle them incorrectly.
+ </P>
+ <MOREINFO>
+ <URL>http://msdn.microsoft.com/en-us/library/ms537449%28VS.85%29.aspx</URL>
+ <URL>https://developer.mozilla.org/en/DOM/form</URL>
+ <URL>notes/form-access/</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="Why doesn't the global variable &quot;divId&quot; always refer to the element with id=&quot;divId&quot;?"
+ ID="globalPollution" NUMID="4_41">
+ <P>
+ Microsoft introduced a shortcut that can be used to reference
+ elements which include an <ICODE>id</ICODE> attribute where the
+ <ICODE>id</ICODE> becomes a globally-accessible property. Some browsers reproduce
+ this behavior. Some, most notably Gecko-based browsers (Netscape and Mozilla),
+ do so only in "quirks" mode. The best approach is the <ICODE>document.getElementById</ICODE>
+ method, which is part of the W3C DOM standard and implemented
+ in modern browsers (including IE from version 5.0). So an
+ element with <ICODE>id=&quot;foo&quot;</ICODE> can be referenced
+ with:-
+ </P>
+ <CODE>
+var el = document.getElementById(&quot;foo&quot;);
+ </CODE>
+ <P>
+ Note: make sure not to use the same <ICODE>id</ICODE> twice in the same document
+ and do not give an element a <ICODE>name</ICODE> that matches an <ICODE>id</ICODE>
+ of another in the same document or it will trigger bugs in MSIE &lt;= 7 with
+ <ICODE>document.getElementsByName</ICODE> and <ICODE>document.getElementById</ICODE>.
+ </P>
+ <MOREINFO>
+ <URL>https://developer.mozilla.org/en/Using_Web_Standards_in_your_Web_Pages/Using_the_W3C_DOM#Accessing_Elements_with_the_W3C_DOM</URL>
+ <URL>faq_notes/faq_notes.html#FAQN4_41</URL>
+ </MOREINFO>
+ </CONTENT>
+ <CONTENT TITLE="How do I modify the content of the current page?"
+ ID="updateContent" NUMID="4_15">
+ <P>
+ Using the non-standard but widely implemented
+ <ICODE>innerHTML</ICODE> property:
+ <ICODE>&lt;div id=&quot;anID&quot;&gt;Some Content&lt;/div&gt;</ICODE> with script:
+ </P>
+ <CODE>
+document.getElementById(&quot;anID&quot;).innerHTML =
+ &quot;Some &lt;em&gt;new&lt;/em&gt; Content&quot;;
+ </CODE>
+ <P>
+ Where <ICODE>&quot;anID&quot;</ICODE> is the (unique on the HTML page)
+ <ICODE>id</ICODE> attribute value of the element to modify.
+ </P>
+ <P>
+ All versions of Internet Explorer exhibit problems with innerHTML, including:
+ </P>
+ <LIST TYPE="UL">
+ <LI>Fails with FRAMESET, HEAD, HTML, STYLE, SELECT,
+ OBJECT, and all TABLE-related elements.</LI>
+ <LI>Replaces consecutive whitespace characters with a single space.</LI>
+ <LI>Changes attribute values and order of appearance.</LI>
+ <LI>Removes quotations around attribute values.</LI>
+ </LIST>
+ <P>
+ If the new content is only text and does not need to replace existing HTML,
+ it is more efficient to modify the <ICODE>data</ICODE> property of a text node.
+ </P>
+ <CODE>
+document.getElementById(&quot;anID&quot;).firstChild.data = &quot;Some new Text&quot;;
+ </CODE>
+ <P>
+ Compatibility Note: Implementations have been known to split long text
+ content among several adjacent text nodes, so replacing the data of the
+ first text node may not replace all the element's text. The <ICODE>normalize</ICODE>
+ method, where supported, will combine adjacent text nodes.
+ </P>
+ <P>
+ Note: Make sure the element exists in the document (has been parsed) before trying to
+ reference it.
+ </P>
+ <MOREINFO>
+ <URL>http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-FF21A306</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/cc304097%28VS.85%29.aspx</URL>
+ <URL>http://msdn.microsoft.com/en-us/library/ms533897%28VS.85%29.aspx</URL>
+ <URL>http://developer.mozilla.org/en/Whitespace_in_the_DOM</URL>
+ <URL>http://developer.mozilla.org/en/docs/DOM:element.innerHTML</URL>
+ <URL>http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#html-fragment-serialization-algorithm</URL> (draft)
+ </MOREINFO>
+ </CONTENT>
+
+ <CONTENT TITLE="Why does my code fail to access an element?" ID="accessElementBeforeDefined">
+ <P>
+ An element can only be accessed after it exists in the document.
+ </P>
+ <P>
+ Either:
+ A) include your script after the HTML element it refers to, or
+ B) use the <ICODE>"load"</ICODE> event to trigger your script.
+ </P>
+ <P>
+ Example A:
+ </P>
+ <CODE>
+&lt;div id="snurgle"&gt;here&lt;/div&gt;
+&lt;script type="text/javascript"&gt;
+// Don't forget var.
+var snurgleEl = document.getElementById("snurgle");
+window.alert(snurgleEl.parentNode);
+&lt;/script&gt;
+ </CODE>
+ <P>
+ Example B:
+ </P>
+ <CODE>
+// In the HEAD.
+&lt;script type="text/javascript"&gt;
+window.onload = function(){
+ var snurgleEl = document.getElementById("snurgle");
+};
+&lt;/script&gt;
+ </CODE>
+
+ <LIST TYPE="UL" TITLE="Other problems can include:">
+ <LI>invalid HTML</LI>
+ <LI>two elements with the same <ICODE>name</ICODE> or <ICODE>id</ICODE></LI>
+ <LI>use of an unsafe name: http://jibbering.com/names/</LI>.
+ </LIST>
+ </CONTENT>
+ <CONTENT TITLE="How can I see in javascript if a web browser accepts cookies?"
+ ID="testCookie" NUMID="4_4">
+ <P>
+ Write a cookie and read it back and check if it's the same.
+ </P>
+ <MOREINFO>
+ Additional Notes:
+ <URL>http://www.ietf.org/rfc/rfc2965.txt</URL>
+ <URL>http://www.galasoft-lb.ch/myjavascript/consulting/2001012701/</URL>
+ <URL>http://www.cookiecentral.com/</URL>
+ </MOREINFO>
+ </CONTENT>
+</CONTENT>
\ No newline at end of file
/trunk/cljs/sections/dom.xml
Property changes:
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property