根据 Gadget 的设计,我们可能会需要在用户不用手动改变设置的情况下,主动地改变某些用户的设置(比如在 "推箱子" 这个 Gadget 中,每过一关就自动更新 "从指定关卡开始" 这个属性)。

要使用 setprefs 功能,我们需要在 Gadget 中包含以下内容:

  • 在 <ModulePrefs> 标签中添加一个 <Require feature="setprefs"/> 标签,这使得 Gadget 读取 setprefs 库;
  • 一个需要被用来改变的用户设置(废话),如果不想让用户随意改动,那么可以使用 hidden 类型(这和 HTML 中是一样的);
  • 一个 JavaScript 函数,比如 set() ,用来改变这个用户设置。

需要注意的是,每个用户设置的长度会受到 URL 长度的限制,根据 Google 的说法,每个用户设置不能超过 2KB。

我们来看下面的例子:这个 Gadget 包含了一个计数器和两个按钮,其中一个按钮将计数器的值增加1,另一个按钮将计数器的值恢复到0。计数器的值被存储在 "counter" 这个用户设置中。为了防止 Gadget 的用户更改这个值,"counter" 的属性被设为 "hidden" 。

 1Google Gadgets (5) :使用 setprefs 主动改变用户设置<?xml version="1.0" encoding="UTF-8" ?>
 2Google Gadgets (5) :使用 setprefs 主动改变用户设置  <Module>
 3Google Gadgets (5) :使用 setprefs 主动改变用户设置    <ModulePrefs title="Set Userprefs Demo">
 4Google Gadgets (5) :使用 setprefs 主动改变用户设置      <Require feature="setprefs" />
 5Google Gadgets (5) :使用 setprefs 主动改变用户设置    </ModulePrefs>
 6Google Gadgets (5) :使用 setprefs 主动改变用户设置  <UserPref name="counter"
 7Google Gadgets (5) :使用 setprefs 主动改变用户设置    default_value="0"
 8Google Gadgets (5) :使用 setprefs 主动改变用户设置    datatype="hidden"/>
 9Google Gadgets (5) :使用 setprefs 主动改变用户设置  <Content type="html">
10Google Gadgets (5) :使用 setprefs 主动改变用户设置    <![CDATA[
11Google Gadgets (5) :使用 setprefs 主动改变用户设置      <script type="text/javascript">
12Google Gadgets (5) :使用 setprefs 主动改变用户设置        // 获得用户设置
13Google Gadgets (5) :使用 setprefs 主动改变用户设置        var prefs = new _IG_Prefs();
14Google Gadgets (5) :使用 setprefs 主动改变用户设置        
15Google Gadgets (5) :使用 setprefs 主动改变用户设置        // 将 "counter" 加 1 
16Google Gadgets (5) :使用 setprefs 主动改变用户设置        function incrementCounter() {
17Google Gadgets (5) :使用 setprefs 主动改变用户设置          var count = prefs.getInt("counter");
18Google Gadgets (5) :使用 setprefs 主动改变用户设置          alert("The count is " + count + ".");
19Google Gadgets (5) :使用 setprefs 主动改变用户设置          prefs.set("counter", count + 1);
20Google Gadgets (5) :使用 setprefs 主动改变用户设置        } 
21Google Gadgets (5) :使用 setprefs 主动改变用户设置        
22Google Gadgets (5) :使用 setprefs 主动改变用户设置        // 将 "counter" 的值恢复为 0
23Google Gadgets (5) :使用 setprefs 主动改变用户设置        function resetCounter(){
24Google Gadgets (5) :使用 setprefs 主动改变用户设置          prefs.set("counter", 0);
25Google Gadgets (5) :使用 setprefs 主动改变用户设置          alert("Count reset to " + prefs.getInt("counter") + ".");
26Google Gadgets (5) :使用 setprefs 主动改变用户设置        }
27Google Gadgets (5) :使用 setprefs 主动改变用户设置      </script>
28Google Gadgets (5) :使用 setprefs 主动改变用户设置
29Google Gadgets (5) :使用 setprefs 主动改变用户设置      <input type="button" value="加1" name="count" onClick="incrementCounter();">
30Google Gadgets (5) :使用 setprefs 主动改变用户设置      <input type="button" value="恢复" name="reset" onClick="resetCounter();">
31Google Gadgets (5) :使用 setprefs 主动改变用户设置
32Google Gadgets (5) :使用 setprefs 主动改变用户设置    ]]> 
33Google Gadgets (5) :使用 setprefs 主动改变用户设置  </Content>
34Google Gadgets (5) :使用 setprefs 主动改变用户设置  </Module>

PS: 如果有多于一个设置需要改变,那么建议使用 JSON 字符串来把这些属性合成一个。下面 (源文件在 这里 ) 是一个实例:

>


另外,在 http://www.json.org/json.js 这个JavaScript 文件中,提供了一些封装好的 JSON 方法供我们使用。

相关文章: