`
wangleifire
  • 浏览: 509122 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个好的学习spicebird地方

阅读更多

http://www.spicebird.com/content/chat-screen

 

开发基础

本文档介绍了小工具开发过程中的基本概念和任务。有关使用小工具 API 的简介,请参阅使用入门

目录

  1. 选择内容类型
    1. HTML
    2. URL
  2. 将现有网页或应用程序转变为小工具
  3. 使用 Userpref 数据类型
    1. 使用 list 数据类型
    2. 使用 location 数据类型
  4. 保存状态
  5. 对特殊字符进行转义
  6. 编写需要登录或 Cookie 的小工具

选择内容类型

当您开发新的小工具时,最初的决策之一是使用哪种内容类型。例如:

<Content type="html">

内容类型确定:

  • 作为小工具作者,哪些 API 功能对您可用。
  • 如何渲染小工具。
  • 部署小工具的位置。

下表介绍了可用内容类型以及何时应使用这些内容类型:

内容类型 说明 何时使用
html 使用 html 内容类型时,通常所有内容都驻留在小工具规范中。type="html" 小工具包含 HTML,可能带有嵌入的 JavaScript、Flash、ActiveX 或其他浏览器对象。此为默认类型。 最灵活、通用的内容类型为 html 。当有疑惑时,请选择 html 内容类型。
url 使用 url 内容类型时,存在于远程网页上的小工具内容将以小工具规范中的网址引用。远程网页是所有 HTML 标记和 JavaScript 驻留的地方。您不能将任何 HTML 标记或 JavaScript 代码置于小工具规范中。 type="url" 内容类型当前不完全受 gadgets.* 或 OpenSocial API 的支持。如果您想使用带有小工具 JavaScript 库的 type="url" 内容类型,请使用传统小工具 API

HTML

使用 html 内容类型时,通常所有代码都驻留在小工具规范中。这包括小工具 XML,以及任何 HTML 标记和 JavaScript。本开发人员指南中的几乎所有示例都使用 html 内容类型。该类型是最灵活、通用的类型,除非您在编写有特殊要求的小工具,否则其通常应当是您的选择。

以下示例是 ROT13 的小工具应用。ROT13 用字母表中每个字母相隔 13 个位置的字母进行替换来加密文本。当您重新运用 ROT13 时,它将再次循环每个字母以恢复原始文本。

以下是小工具规范:

<?xml version="1.0" encoding="UTF-8" ?> 

<Module>
  <ModulePrefs title="Magic Decoder"/> 
  <Content type="html">
  <![CDATA[
     <script type="text/javascript">

       // The gadget version of ROT13.
       // Encodes/decodes text strings by replacing each letter with the letter
       // 13 positions to the right in the alphabet. 
       function decodeMessage (form) {
          var alpha = "abcdefghijklmnopqrstuvwxyz";
          var input = form.inputbox.value; 
          var aChar;
          var message = "";
          for (var i = 0; i <input.length; i++)
          { 
             aChar = input.charAt(i);
             var index = alpha.indexOf(aChar.toLowerCase());

             // if a non-alphabetic character, just append to string
             if (index==-1)
             {
                message += aChar;
             }

             // if you have to wrap around the end of the alphabet
             else if(index > 12) { // compensate for 0-based index
                index = 25 - index; // last item in array is at [25]
                index = 12 - index; // because array starts with 0
                aChar = alpha.charAt(index);
                message += aChar;
             }

             // if you don't have to wrap
             else {
                aChar = alpha.charAt(index+13);
                message += aChar;
             }
          }
          document.getElementById('content_div').innerHTML = "<b>Your message: </b>" + message; 
     }
     </script>

     <FORM NAME="myform" ACTION="" METHOD="GET">Message: <BR>
       <INPUT TYPE="text" NAME="inputbox" VALUE=""><P>
       <INPUT TYPE="button" NAME="button" Value="Transform" onClick="decodeMessage(this.form)">
     </FORM>
     <div id="content_div"></div>
  ]]>
  </Content>
</Module>

type="html" 小工具的规则如下:

  • type="html" 小工具必须包括 CDATA 部分,且任何 HTML 必须在该部分内运行。
<Content type="html"> 
    <![CDATA[ HTML here...
 ]]>

CDATA 部分用来转义包含字符的文本块,否则这些字符会被视为标记。CDATA 部分中唯一识别的分隔符为结束 CDATA 部分的“]]>”字符串。

  • 不能使用 <html>, <head>,<body> 标签。生成的小工具具有其自身的 <html>, <head>,<body> 标签。只包括通常可能进入 <body> 标签的内容。

具有 html 内容类型的小工具还可以引用外部 JavaScript 文件:

<Module>
  <ModulePrefs ... /> 
  <Content type="html"><![CDATA[
    <script src="http://www.example.com/gadgets/clock/clock.js" type="text/javascript"></script>

  ]]></Content> 
</Module>

URL

当小工具具有 type="url" 内容类型时,href= 属性提供网址,并且小工具规范中的任何其他内容都被忽略 。具有 url 内容类型时,假设与此小工具的用户界面和编程逻辑相关的所有信息均驻留在此网址引用的文件中。您不能将任何 HTML 标记或 JavaScript 置于小工具中。例如:

<Module>
  <ModulePrefs ... /> 
  <Content type="url" href="http://www/cgi-bin/example/gadgets/mystats.cgi
" /> 
</Module> 

说明

将现有网页或应用程序转变为小工具

您可以通过遵循以下指导原则将现有网页或应用程序转变为小工具:

  • 除去 <html><head><body> 标签(换言之,只提供 HTML 内容本身)。该指导原则仅适用于 type="html" 小工具。其不适用于 type="url" 小工具。
  • 对于装载事件,请使用 gadgets.util.registerOnLoadHandler()
  • 如果小工具需要登陆,请使用 URL 内容类型 。请参阅编写需要登录或 Cookie 的小工具 以获得可能的帮助。请注意,HTTPS 小工具在 Internet Explorer 下会发出“混合内容”警告,其可能会干扰用户。
  • 对用户界面进行必要更改,以使您的页面或应用程序适合小型小工具空间。对于业务爱好者和专业人员构建的原型,makeRequest() 可以用于代理内容。对于商业开发的小工具,我们建议只创建一个新的小页面,然后使用 type="url" 指向它。

使用 Userpref 数据类型

在小工具规范中,每个用户使用偏好 都有一个数据类型。datatype 是一个可选字符串,其指定属性的数据类型。datatype 的可能值为 stringboolenumhidden (用户不可编辑的非可见字符串)、list ,以及 location (对于基于 Google 地图的小工具)。默认数据类型为 string

请参阅参考以获得有关用户参考数据类型 的详情。

本部分介绍了两个更专用的数据类型:listlocation 。您可以找到有关如何在整个文档中使用其他数据类型(例如 enum hidden bool )的实例。

使用 list 数据类型

具 有 list 数据类型的用户使用偏好是一组在运行时由用户动态提供的值。当用户向用户使用偏好编辑框中键入值时,这些值将被添加到列表中。在运行时此列表可以通过编程 方式由小工具进行访问,就像任何其他用户使用偏好一样。可以在想要允许用户动态提供值的任意列表时随时使用 list 数据类型。例如,天气小工具可以允许用户输入邮政编码列表。

您可以通过使用 datatype="list" 声明 userpref 具有 list 数据类型。例如:

<UserPref name="mylist" display_name="Add Search Terms" datatype="list" required="true"/> 

小工具使用 Prefs 函数 getArray(), 访问列表中的值,例如:

var search_terms = prefs.getArray("mylist");

在此数组中,项目存储为以管道符分隔的列表。您可以使用 Prefs 函数 getString() 将此列表作为单个字符串返回,其中值被管道符 (|) 字符分隔,例如:

prefs.getString("mylist");

您还可以使用以管道符分隔的字符串设置列表类型的默认值:

<UserPref name="mylist" display_name="Add Search Terms" datatype="list" defaultvalue="zdnet|pc|Apple Insider"/>

您可以使用 Prefs 函数 setArray(name, val) 通过编程方式将值添加到该列表。要使用此函数,您的小工具必须包括 <ModulePrefs> 下的 <Require feature="setprefs"/> 。例如,以下代码段将值“Nokia”和“CNET”添加到了列表。

...

<ModulePrefs title="Feed Searcher" scrolling="true">
   <Require feature="setprefs" />

   </ModulePrefs>

...
prefs.setArray("mylist", ["Nokia","CNET"]);

此处是一个简单实例,可以输出用户在编辑框中输入的列表项目。

<?xml version="1.0" encoding="UTF-8" ?>
<Module>
  <ModulePrefs 
    title="List Data Type Example" 
    scrolling="true"/> 
  <UserPref name="mylist" 
    display_name="Add Terms" 
    datatype="list" />
  <Content type="html">
  <![CDATA[ 
  <div id=content_div></div>

  <script type="text/javascript"> 
    // Get userprefs
    var prefs = new gadgets.Prefs();

    // Get the array of search terms entered by the user
    var terms = prefs.getArray("mylist");  
    var html = "";

    // If the user has not added any terms yet, display message.
    if (terms.length == 0)
    {
      html += "Edit the userprefs to add terms.";
    }
    else {
      html += "Your terms are:<br /><br />";
      for (var i = 0; i < terms.length ; i++) {
        var term = (terms[i]);
        html += term + "<br />";
      }
    }
    document.getElementById("content_div").innerHTML = html; 
  </script>

  ]]> 
  </Content>
</Module>

使用 location 数据类型

基于 Google Maps 的小工具可以使用 location 数据类型。以下实例小工具说明了如何使用 location 数据类型。对于小工具,为 location 数据类型提供的值必须是美国、加拿大或英国的主要城市或邮政编码。您可能发现使用邮政编码效果更佳。

当使用 location 数据类型时,您可以使用 getString() 来检索用户特定位置的经度和纬度。

<Module>
  <ModulePrefs title="Map of __UP_loc__" height="300" 
    author="Jane Smith" 
    author_email="xxx@google.com" /> 
  <UserPref name="loc" 
    display_name="Location" 
    datatype="location" 
    required="true" /> 
  <Content type="html">
  <![CDATA[ 
    <script src="http://maps.google.com/maps?file=js" type="text/javascript"></script>
    <div id="map" style="width: 100%; height: 100%;"></div>
    <script type="text/javascript">
    var prefs = new gadgets.Prefs();
    var map = new GMap(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.centerAndZoom(new GPoint(prefs.getString("loc.long"), prefs.getString("loc.lat")), 6);
    </script>

  ]]> 
  </Content>
</Module>  

当读取某个 location 使用偏好 x 时:

  • 如果 x 为空字符串(表示空位置), x.latx.long 是空字符串。
  • 如果 x 无法进行地理编码(表示无效位置),x.latx.long 为 0.0。

早期版本的小工具 API 不允许指定 location 类型的 default_value 。现在情况已经改变。

保存状态

用户普遍都可以使用编辑框明确地设置其用户使用偏好。但有时通过编程方式设置用户使用偏好的值(用户不直接参与)很有用。例如,对于游戏小工具,您可能想要永久地存储用户的最高分数。您可以通过以编程方式设置“high_score”用户使用偏好来实现这一目标。

要使用 setprefs 功能,您的小工具应包括以下内容:

  • <Require feature="setprefs"/> 标签(位于 <ModulePrefs> 下),用于通知小工具加载 setprefs 库。
  • 您想要通过编程方式设置并永久存储的 userpref 的值。通常,您将 userpref 的数据类型设置为 hidden
  • 对于您要保存其值的 userpref 调用 JavaScript 函数 set()

请注意,使用偏好大小目前受 URL 限制,大小为 2K。

以下示例小工具由两个按钮组成:一个按钮可以增加计数器的值,另一个按钮可以将计数器的值重设为 0。在此实例中,“计数器”是用户使用偏好。其数据类型为 hidden ,这意味着不允许用户直接修改其值。

以下是小工具规范:

<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs 
    title="Setprefs New">
    <Require feature="opensocial-0.7"/>
    <Require feature="setprefs" /> 
    </ModulePrefs>
  <UserPref 
    name="counter" 
    defaultvalue="0" 
    datatype="hidden"/>
  <Content type="html">
  <![CDATA[ 
    <div id="content_div" style="height: 100px;"></div>
    <script type="text/javascript">

    // Get user preferences
    var prefs = new gadgets.Prefs();
    var html = "";
    var div = document.getElementById('content_div');
    // Increment value of "counter" user preference
    function incrementCounter() {  
      var count = prefs.getInt("counter");
      div.innerHTML = "The count is " + count + ".";
      // Increment "counter" userpref          
      prefs.set("counter", count + 1);
    }

    // Reset value of "counter" userpref to 0
    function resetCounter(){
      prefs.set("counter", 0);
      div.innerHTML = "Count reset to " + prefs.getInt("counter") + ".";
    }

    </script>
    <input type=button value="Count" name="count" onClick="incrementCounter()">
    <input type=button value="Reset" name="reset" onClick="resetCounter()">
  ]]> 
  </Content>
</Module>

请注意 :如果您需要存储多个值,我们建议将值保存到 JSON 字符串中。

对特殊字符进行转义

在小工具规范的 XML 属性中,您必须对某些特殊字符进行转义。请注意,仅 ASCII 实体 可以在小工具规范中使用。例如,您不能使用 ISO 8859-1 符号实体。此处是受支持的特殊字符列表:

字符 转义代码
& &amp;
< &lt;
> &gt;
" &quot;
' &apos;

例如:

  • 错误: href="http://www.foo.com/bar?x=a&y=b"
  • 正确: href="http://www.foo.com/bar?x=a&amp;y=b"
  • 错误: description="this is a "sexy" gadget"
  • 正确: description="this is a &quot;sexy&quot; gadget"

请注意,CDATA 块中无需此类转义。但是,在 CDATA 块中进行转义仍然是一种好做法。

在 JavaScript 代码中,您可以使用 _hesc(str) 函数返回 HTML 字符串 str 以及下列已转义的字符: <>'".

编写需要登录或 Cookie 的小工具

Microsoft Internet Explorer 和 Apple Safari 的默认隐私政策不允许第三方站点设置 Cookie。因此,某些小工具可能运行不正常。特别地,使用 Cookie 登录的站点在 iGoogle 页面中的 iframe 中可能运行不正常。此处是可能的解决方案:

  • 使用 URL 参数(而不是 Cookie)。例如,Orkut 生日小工具 通过 URL 传递验证凭证。警告:如果您选择该方式,请注意不要将这些 URL 参数泄露到 HTTP 下线域中的其他网站。
  • 编写 P3P 标题。根据您站点的隐私政策,您可能能够编写 P3P 标题,使 Internet Explorer(但非 Safari)能够从您的站点中读取第三方 Cookie。如果您使用 PHP 且想要设置标题,则可以使用位于 PHP 页面顶部的该代码段:
<?php
  header("P3P: CP=\"CAO PSA OUR\"");
?> 

 

分享到:
评论

相关推荐

    java源码资源手机游戏J2ME毕业设计

    java源码资源手机游戏J2ME毕业设计提取方式是百度网盘分享地址

    第5章 存储器管理(笔记整理)

    内容概要:本章节深入探讨了存储器管理和相关概念。首先介绍了存储器的多层次结构,涵盖了寄存器、主存和辅助存储的区别及其功能。接下来讨论了主存储器、寄存器的功能和角色,包括二者如何支持程序运行及数据处理。之后分析了高速缓存和磁盘缓存的运作机制及其优化计算机性能的方式。接着概述了程序的装入、链接、地址绑定、内存保护的技术细节。此外,文章还讲述了存储器管理的高级技巧如对换技术、覆盖技术和不同的分配方式,以及各种存储管理模式的具体实施方式,比如连续分配、分页、分段及段页组合。 适用人群:对操作系统内部工作原理有一定兴趣的计算机专业学生、技术人员及爱好者。 使用场景及目标:适用于课程学习和项目实践中,帮助理解和设计复杂的存储管理系统。通过本文的学习可以达到对操作系统底层存储管理的理解,掌握不同存储分配策略的选择标准和技术应用。 阅读建议:建议逐步阅读每个小节,重点关注各部分内容的实际应用场景及其背后的设计理念。同时,尝试绘制存储层次模型和不同管理策略的工作流程图,加深理解。

    gradle611all.zip.png

    gradle611all.zip.png

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    onnxruntime-1.16.0-cp39-cp39-win_amd64.whl

    C#ASP.NET大型商城系统源码带数据库文档数据库 SQL2008源码类型 WebForm

    ASP.NET大型商城系统源码带数据库文档 1.开发环境:vs2010 + slq2005/2008 2.首先在SQL2005建立一个空白数据库。 3.有VS2010 打开项目,直接调试,根据出现提示建立数据库。 4.第3点出现的页面的管理员用户和密码就是后期软件的登陆帐户和密码。 5.本系统有两套模版,在店铺管理 - 页面设置 这里做修改 6.如果觉得自己的系统是空数据库,想弄成和演示的一样,那就将doc/database下面的数据库直接还原就可以了。 7.还原后的数据库登陆帐户和密码分别是:admin888 admin888

    C#ASP.NET酒店管理系统源码(WPF)数据库 Access源码类型 WinForm

    ASP.NET酒店管理系统源码(WPF) 一、源码特点 采用WPF进行开发的酒店管理系统源码,界面相当美观,功能齐全 二、菜单功能 1、预订登记:可选择入住时间、离店时间、所在城市、证件类型,保存、删除、查询、返回 2、住宿结算:新增入住、保存、删除、查询、返回 3、今日盘点:查询、返回 4、查询统计: 5、房间管理:增加房间类型、删除类型、增加房间、删除房间、保存、返回 6、用户管理:增加用户、删除用户、保存、返回 7、系统配置:基本功能 8、显示当前系统时间等功能的实现

    资源quazip.dll

    资源quazip.dll

    C#汽车货运管理系统源码 货运公司车辆管理系统源码数据库 SQL2008源码类型 WinForm

    汽车货运管理系统源码 货运公司车辆管理系统源码 货运公司管理系统采用winform C# 技术开发,数据库Sqlserver2008R2,同时兼容Mysql。 更新日志: 1.修改新增数据异常。 2.增加安装部署工程。 包括如下功能模块: 一、输入功能: 该系统提供了对基本信息录入、车辆登记录入、车辆各项费用录入、驾驶员登记录入、车辆出回车录入、主卡分卡充值录入、加油登记录入,配件信息录入等的模式录入和表格界面录入。在出现从表信息录入时会出现表格界面的录入方式其录入方式同模式录入方式一样。录入信息时可能会出现相同的信息,为避免重复录入部分字段设置了辅助录入功能,您只需输入几项即可完成录入功能。操作方便快捷,可大大提高您的工作效率。 二、查询功能: 您只需用鼠标点击一下相应节点,就可迅速查询统计销售的情况,根据不同的查询统计条件显示出需要的结果。 三、报表功能: 根据查询或者统计出来的结果生成报表。 四:打印功能: 系统支持打印功能,如想打印信息单击预览报表上的打印按钮即可。 五、安全功能: 进入系统后,单击菜单“系统→工具→用户及权限”可以设置系统的各用

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    基于springboot+vue的大学生创业项目的信息管理系统源码数据库文档.zip

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    numpy-1.25.2-cp311-cp311-linux_armv7l.whl

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)

    STM32神舟III号例程源码SD读卡器(神舟III号-库函数版)提取方式是百度网盘分享地址

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    numpy-1.20.0-cp37-cp37m-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    matplotlib-3.7.5-cp39-cp39-linux_armv7l.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    onnxruntime-1.16.3-cp38-cp38-win_amd64.whl

    【node毕业设计】nodejs学院会议纪要管理系统源码(完整前后端+mysql+说明文档).zip

    环境说明: 开发语言:nodejs 框架:Express 数据库:mysql 5.7(一定要5.7版本) 数据库工具:Navicat11 开发软件:VS code/HBuilder X

    【小程序毕业设计】自助购药小程序源码(完整前后端+mysql+说明文档+LW).zip

    功能说明: 系统主要包括首页、个人中心、用户管理、商家管理、药品信息管理、药品分类管理、发票信息管理、系统管理等功能模块。 环境说明: 开发语言:Java 服务器:tomcat7及以上 JDK版本:JDK1.8 数据库:mysql 5.7数据库工具:Navicat11及以上 开发软件:eclipse/idea 小程序框架:uniapp/原生小程序 开发工具:HBuilder X/微信开发者

    基于Servlet和JSP实现的登录Demo

    《基于Servlet和JSP实现的登录Demo》项目是一个简单的 Java Web 应用示例,展示了如何使用 Servlet 和 JSP 搭建基础的用户登录功能。项目通过 Java Servlet 处理用户请求,使用 JSP 构建前端页面,并结合 MySQL 数据库验证用户身份。用户可以通过登录页面提交账号和密码,后端接口会对用户输入进行校验,并返回登录结果。本项目适合 Java Web 初学者,旨在帮助学习 Servlet 和 JSP 的基础用法,掌握表单提交、请求转发、数据库连接等关键技术点。项目环境包括 IntelliJ IDEA、Apache Tomcat 和 MySQL,支持 JDK 8 及以上版本。

    (全新整理)中国高校各专业录取分数线、招生计划、分段表数据(2008-2023年)

    1、资源内容地址:https://blog.csdn.net/2301_79696294/article/details/143733939 2、数据特点:今年全新,手工精心整理,放心引用,数据来自权威,且标注《数据来源》,相对于其他人的控制变量数据准确很多,适合写论文做实证用 ,不会出现数据造假问题 3、适用对象:大学生,本科生,研究生小白可用,容易上手!!! 4、课程引用: 经济学,地理学,城市规划与城市研究,公共政策与管理,社会学,商业与管理

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    pillow-10.3.0-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

    opencv_contrib_python-4.5.1.48-cp39-cp39-linux_armv7l.whl

Global site tag (gtag.js) - Google Analytics