mozilla

版本 511723 / Rhino overview

  • 版本网址缩略名: Rhino/Overview
  • 版本标题: Rhino overview
  • 版本 id: 511723
  • 创建于:
  • 创建者: hujun
  • 是否是当前版本?
  • 评论

修订内容

简介

大多数用过 JavaScript 的人都是将js脚本放入HTML页面中使用。然而, Rhino 仅仅是对javascript核心部分的实现,并没有包含操作HTML的对象或方法。

Rhino 包括

语言

JavaScript 的标准是 Standard ECMA-262 ECMAScript: A general purpose, cross-platform programming language. Rhino 1.3 及以上版本可以满足上述标准的第3版。

Rhino 1.6 及以上版本实现了 ECMA-357 ECMAScript for XML (E4X) 标准. 查看详细的规格说明可以获得更多的信息,查看 Rhino version 1.6R1 release notes 可以看到Rhino对标准实现的具体情况。

此外,Rhino实现了JavaAdapters,这样我们可以用一个JavaScript对象来实现任何java的接口或者继承任何java的类。查看下载文件中example文件夹中的enum.js获取更多的信息。.

有很多JavaScript的书和教程。 我们推荐JavaScript: The Definitive Guide 这本书,里面有一章是说Rhino的。

废弃的语言特性

很多在JavaScript 1.2中定义的特性已经被废弃了. 这些特性允许“计算反射”:可以决定或影响它被评价的方法的方面。 这些特性没有被广泛使用,他们对阻碍和防止优化的行为进行了重大的约束。 这些被废弃的特性是 __proto__ 和 __parent__ 属性, 还有构造函数 With,、ClosureCall。在JavaScript 1.4中使用这些特性会产生错误。在其他的版本中使用这些特性,会产生警告。

国际化

The messages reported by the JavaScript engine are by default retrieved from the property file org/mozilla/javascript/resources/Messages.properties. If other properties files with extensions corresponding to the current locale exist, they will be used instead.

JavaScript语言版本

JavaScript引擎的很多行为与语言的版本有关。在浏览器调用中,JavaScript版本的选择是通过script标签中的LANGUAGE属性定义的,比如"JavaScript1.2"。

1.3 和更高版本是ECMA一致的。

操作符 ==  和 !=

1.2版本用 == 和 != 来处理绝对相等的问题。 在1.3或更高的版本里, == 和 != 和ECMA中所描述的一样。 操作符 === and !== 在所有版本中都表示绝对相等。

布尔转换

1.3之前的所有版本Boolean(new Boolean(false)) 值为false 。在1.3及1.3之后,它的值为true。

Array.prototype.toString 和 Object.prototype.toString

1.2版本只是返回数组或对象的文字符号 (比如"{{ mediawiki.external(1,2,3) }}" or "{a:1, b:2}" )。 在1.3或更高版本中这些函数与ECMA标准一致。

Array 构造函数

只有在1.2版本中,Array(i) 用一个参数i构造一个只有一个元素且元素的值为i的数组。 在其他版本中,使用和ECMA一致的标准 (一个没有元素的数组被构造,长度为i)。

String.prototype.substring

只有在1.2版本中, 如果第一个参数小于第二个参数,两个参数不会互换。其他的版本都符合ECMA标准。

String.prototype.split

只有对1.2版本,split按照Perl4的特例当用一个单独的空格字符作参数时, (跳过最先的空白,用空白分割). 其他的版本完全按照ECMA的标准分割。

安全

Rhino的安全特性提供了找到代码片段的来源的功能 (还有任何会轮流产生的代码片段)。这些特性考虑到了传统的基于URL的安全策略(在网景领航员中的JavaScript)的实现。执行信任的JavaScript代码时可以不考虑安全性特征。

运行不被信任的JavaScript代码时,需要做两件事来保证安全性。第一,每一个被创建的Context必须被提供一个实现SecuritySupport接口的实例。 这样在功能上给Rhino提供了让它执行安全相关任务的支持。

第二, security.requireSecurityDomain属性的值应该被改为true在资源束bundle org.mozilla.javascript.resources.Security中. 这个属性的值可以在运行时通过调用ContextisSecurityDomainRequired方法来决定。将这个属性设置为ture,要求任何编译或评估JavaScript的调用必须提供一个安全区域对象(任意类型),用来标识JavaScript代码。在一个典型的客户端嵌入中,这个对象可能是提供javascript的服务器的URL,或者是一个包含代码片段的签发人的代表(用于基于证书的安全策略)。

When JavaScript code attempts a restricted action, the security domain can be retrieved in the following manner. The class context should be obtained from the security manager (see java.lang.SecurityManager.getClassContext()). Then, the class of the code that called to request the restricted action can be obtained by looking an appropriate index into the class context array. If the caller is JavaScript the class obtained may be one of two types. First, it may be the class of the interpreter if interpretive mode is in effect. Second, it may be a generated class if classfile generation is supported. An embedding can distinguish the two cases by calling isInterpreterClass() in the Context class. If it is the interpreter class, call the getInterpreterSecurityDomain() method of Context to obtain the security domain of the currently executing interpreted script or function. Otherwise, it must be a generated class, and an embedding can call getSecurityDomain() in the class implementing SecuritySupport. When the class was defined and loaded, the appropriate security domain was associated with it, and can be retrieved by calling this method. Once the security domain has been determined, an embedding can perform whatever checks are appropriate to determine whether access should be allowed.

{{ languages( { "ja": "ja/Rhino_Overview" } ) }}

修订版来源

<h3 id="Introduction" name="Introduction">简介</h3>
<p>大多数用过&nbsp;<a href="/en/JavaScript" title="en/JavaScript">JavaScript</a>&nbsp;的人都是将js脚本放入<a href="/en/HTML" title="en/HTML">HTML</a>页面中使用。然而, Rhino 仅仅是对javascript核心部分的实现,并没有包含操作HTML的对象或方法。</p>
<p>Rhino 包括</p>
<ul>
 <li>&nbsp;<a href="/en/New_in_JavaScript_1.7" title="en/New_in_JavaScript_1.7">JavaScript 1.7</a>的全部特性</li>
 <li>允许直接用java使用脚本</li>
 <li>用一个<a href="/en/Rhino/Shell" title="en/Rhino/Shell">JavaScript Shell</a>来执行JavaScript脚本</li>
 <li>用一个<a href="/en/Rhino/JavaScript_Compiler" title="en/Rhino/JavaScript_Compiler">JavaScript编译器</a>&nbsp;来将JavaScript脚本文件转换成Java类文件</li>
 <li>用一个<a class="external" href="http://www.mozilla.org/rhino/debugger.html">JavaScript调试器</a>&nbsp;来调试Rhino执行的脚本</li>
</ul>
<h3 id="Language" name="Language">语言</h3>
<p>JavaScript 的标准是&nbsp;<a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-262.htm">Standard ECMA-262 ECMAScript: A general purpose, cross-platform programming language</a>. Rhino 1.3 及以上版本可以满足上述标准的第3版。</p>
<p>Rhino 1.6 及以上版本实现了&nbsp;<a class="external" href="http://www.ecma-international.org/publications/standards/Ecma-357.htm">ECMA-357 ECMAScript for XML (E4X)</a>&nbsp;标准. 查看详细的规格说明可以获得更多的信息,查看&nbsp;<a class="external" href="http://www.mozilla.org/rhino/rhino16R1.html#E4X">Rhino version 1.6R1 release notes</a> 可以看到Rhino对标准实现的具体情况。</p>
<p>此外,Rhino实现了JavaAdapters,这样我们可以用一个JavaScript对象来实现任何java的接口或者继承任何java的类。查看下载文件中example文件夹中的<code class="filename">enum.js获取更多的信息。</code>.</p>
<p>有很多JavaScript的书和教程。 我们推荐<a class="external" href="http://www.oreilly.com/catalog/jscript5/">JavaScript: The Definitive Guide</a>&nbsp;这本书,里面有一章是说Rhino的。</p>
<h3 id="Deprecated_Language_Features" name="Deprecated_Language_Features">废弃的语言特性</h3>
<p>很多在JavaScript 1.2中定义的特性已经被废弃了. 这些特性允许“计算反射”:可以决定或影响它被评价的方法的方面。 这些特性没有被广泛使用,他们对阻碍和防止优化的行为进行了重大的约束。 这些被废弃的特性是&nbsp;<code>__proto__</code>&nbsp;和&nbsp;<code>__parent__</code>&nbsp;属性, 还有构造函数&nbsp;<code>With</code>,、<code>Closure<font face="Open Sans, sans-serif"><span style="line-height: 21px;">和</span></font></code><code>Call。</code>在JavaScript 1.4中使用这些特性会产生错误。在其他的版本中使用这些特性,会产生警告。</p>
<h3 id="Internationalization" name="Internationalization">国际化</h3>
<p>The messages reported by the JavaScript engine are by default retrieved from the property file <code class="filename">org/mozilla/javascript/resources/Messages.properties</code>. If other properties files with extensions corresponding to the current locale exist, they will be used instead.</p>
<h3 id="JavaScript_Language_Versions" name="JavaScript_Language_Versions">JavaScript语言版本</h3>
<p>JavaScript引擎的很多行为与语言的版本有关。在浏览器调用中,JavaScript版本的选择是通过script标签中的LANGUAGE属性定义的,比如"JavaScript1.2"。</p>
<p>1.3 和更高版本是ECMA一致的。</p>
<h4 id="Operators_.3D.3D_and_.21.3D" name="Operators_.3D.3D_and_.21.3D">操作符&nbsp;<code>==</code>&nbsp; 和&nbsp;<code>!=</code></h4>
<p>1.2版本用&nbsp;<code>==</code>&nbsp;和&nbsp;<code>!=</code>&nbsp;来处理绝对相等的问题。 在1.3或更高的版本里,&nbsp;<code>==</code>&nbsp;和&nbsp;<code>!=</code>&nbsp;和ECMA中所描述的一样。 操作符&nbsp;<code>===</code> and <code>!==</code>&nbsp;在所有版本中都表示绝对相等。</p>
<h4 id="ToBoolean" name="ToBoolean">布尔转换</h4>
<p><code>1.3之前的所有版本Boolean(new Boolean(false))</code>&nbsp;值为<code>false</code>&nbsp;。在1.3及1.3之后,它的值为<font face="Courier New, Andale Mono, monospace"><span style="line-height: normal;">true。</span></font></p>
<h4 id="Array.prototype.toString_and_Object.prototype.toString" name="Array.prototype.toString_and_Object.prototype.toString"><code>Array.prototype.toString 和 Object.prototype.toString</code></h4>
<p>1.2版本只是返回数组或对象的文字符号 (比如<code>"{{ mediawiki.external(1,2,3) }}"</code> or <code>"{a:1, b:2}"</code>&nbsp;)。 在1.3或更高版本中这些函数与ECMA标准一致。</p>
<h4 id="Array_constructor" name="Array_constructor"><code>Array</code>&nbsp;构造函数</h4>
<p><code>只有在1.2版本中,Array(<var>i</var>)</code>&nbsp;用一个参数i构造一个只有一个元素且元素的值为i的数组。&nbsp;在其他版本中,使用和ECMA一致的标准 (一个没有元素的数组被构造,长度为i)。</p>
<h4 id="String.prototype.substring" name="String.prototype.substring"><code>String.prototype.substring</code></h4>
<p>只有在1.2版本中, 如果第一个参数小于第二个参数,两个参数不会互换。其他的版本都符合ECMA标准。</p>
<h4 id="String.prototype.split" name="String.prototype.split"><code>String.prototype.split</code></h4>
<p>只有对1.2版本,split按照Perl4的特例当用一个单独的空格字符作参数时, (跳过最先的空白,用空白分割). 其他的版本完全按照ECMA的标准分割。</p>
<h3 id="Security" name="Security">安全</h3>
<p>Rhino的安全特性提供了找到代码片段的来源的功能 (还有任何会轮流产生的代码片段)。这些特性考虑到了传统的基于URL的安全策略(在网景领航员中的JavaScript)的实现。执行信任的JavaScript代码时可以不考虑安全性特征。</p>
<p>运行不被信任的JavaScript代码时,需要做两件事来保证安全性。第一,每一个被创建的Context必须被提供一个实现SecuritySupport接口的实例。&nbsp;这样在功能上给Rhino提供了让它执行安全相关任务的支持。</p>
<p>第二, <code>security.requireSecurityDomain属性的值应该被改为</code><code>true在资源束</code>bundle <code>org.mozilla.javascript.resources.Security中</code>. 这个属性的值可以在运行时通过调用<code style="font-size: 14px;">Context<font face="Open Sans, sans-serif"><span style="line-height: 21px;">的</span></font></code><code style="font-size: 14px;">isSecurityDomainRequired方法来决定。将这个属性设置为ture,要求任何编译或评估JavaScript的调用必须提供一个安全区域对象(任意类型),用来标识JavaScript代码。在一个典型的客户端嵌入中,这个对象可能是提供javascript的服务器的URL,或者是一个包含代码片段的签发人的代表(用于基于证书的安全策略)。</code></p>
<p>When JavaScript code attempts a restricted action, the security domain can be retrieved in the following manner. The class context should be obtained from the security manager (see <code>java.lang.SecurityManager.getClassContext()</code>). Then, the class of the code that called to request the restricted action can be obtained by looking an appropriate index into the class context array. If the caller is JavaScript the class obtained may be one of two types. First, it may be the class of the interpreter if interpretive mode is in effect. Second, it may be a generated class if classfile generation is supported. An embedding can distinguish the two cases by calling <code>isInterpreterClass()</code> in the <code>Context</code> class. If it is the interpreter class, call the <code>getInterpreterSecurityDomain()</code> method of <code>Context</code> to obtain the security domain of the currently executing interpreted script or function. Otherwise, it must be a generated class, and an embedding can call <code>getSecurityDomain()</code> in the class implementing <code>SecuritySupport</code>. When the class was defined and loaded, the appropriate security domain was associated with it, and can be retrieved by calling this method. Once the security domain has been determined, an embedding can perform whatever checks are appropriate to determine whether access should be allowed.</p>
<p>{{ languages( { "ja": "ja/Rhino_Overview" } ) }}</p>
恢复到这个版本