比较版本

在扩展中下载JSON和JavaScript

修订版 251569:

由 Laser 在 进行的修订 251569

修订版 209241:

由 Laser 在 进行的修订 209241

标题:
在扩展中下载JSON和JavaScript
在扩展中下载JSON和JavaScript
网址缩略名:
在扩展中下载JSON和JavaScript
在扩展中下载JSON和JavaScript
标签:
Extensions
内容:

修订版 251569
修订版 209241
t7    <p>t
8      <br>
9      在很多扩展中常见的用法是使用<a href="cn/XMLHttpRequest">XMLHttpRequest</a
>>(或者其他机制)从一个远程的网站下载 JavaScript 或者<a href="cn/JSON">JSON</a>(这两者是不 
>同的!)一旦内容下载完成,扩展的作者就会使用 <code><a href="cn/JavaScript_1.5_%e6%a0%b8 
>%e5%bf%83%e5%8f%82%e8%80%83/%e5%85%a8%e5%b1%80%e5%87%bd%e6%95%b0/ 
>eval">eval()</a></code> 继续进行解码的工作,把字串内容转换成 JavaScript 对象。这样的做法是<b 
>>非常危险</b>的,并且,实际上不会通过<a class="external" href="http://addons.mozi 
>lla.org">AMO</a>的审核。所以这样的扩展将不会被允许离开AMO的砂箱。 
10    </p>
11    <p>
12      这种做法是危险的是因为解码后的 JavaScript 具有全部的 chrom 权限并且可以执行一些很恶劣的动作.一个扩
>展下载下来的JavaScript如何能执行恶劣的动作?如果承载 JavaScript 的网络服务器被劫持了或者被攻陷了,那就很容易 
>了。这种情况是有可能发生的。AMO很认真地看待这种危险。 
13    </p>
14    <p>
15      好消息是我们有很多方法来绕开这个问题。
16    </p>
17    <h3 id=".E4.B8.8B.E8.BD.BD_JSON" name=".E4.B8.8B.E8.BD.BD_JSO
>N"> 
18      下载 JSON
19    </h3>
20    <p>
21      如果扩展是需要下载JSON,那么开发人员应该使用在<a href="cn/JSON">这里</a>讨论过的某种JSON
>解码方法,而千万不要使用<code>eval()</code> 。JSON是有关状态的,并不允许解码函数。扩展开发人员可用的JSO 
>N解码方法保护了扩展免于受到恶意的JSON和JavaScrip的侵害。从远端的服务器通过JSON下载状态变得日益流行。使用JSON 
>解码器,而不是<code>eval()</code>! 
22    </p>
23    <h3 id=".E4.B8.8B.E8.BD.BD_JavaScript" name=".E4.B8.8B.E8.BD.
>BD_JavaScript"> 
24      下载 JavaScript
25    </h3>
26    <p>
27      当然了,有时候也有扩展中下载并插入 JavaScript 代码模块的时候。发生这些事情主要是因为扩展试图保持它的部分代
>码是干净和动态的,而扩展的作者又不想为每次脚本的变化发布一个新版本。在这种场合下,我们应该使用 JavaScript 的砂箱来把下 
>载下来的JavaScript代码和扩展的其它代码部分以及宿主的应用给隔离开。 
28    </p>
29    <p>
30      砂箱是通过使用<code><a href="cn/Components.utils.evalInSandbox">Co
>mponents.utils.evalInSandbox()</a></code>实现的。JavaScript 代码会被和任何Ja 
>vaScript需要交互的"安全"的对象一起添加到砂箱里。砂箱自己也不是完全没有危险,开发者应该仔细阅读砂箱的文档页面,以确保不可 
>信的代码不会从砂箱中泄露出来。 
31    </p>{{ languages( { "en": "en/Downloading_JSON_and_JavaScript
>_in_extensions" } ) }} 

返回历史