65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的 IGoogle 小工具

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.64/5 (6投票s)

2008年7月1日

CPOL

2分钟阅读

viewsIcon

41777

一个简单的 iGoogle 小工具,用于显示 Expedia RSS 信息。

引言

这是一篇关于 iGoogle 小工具的简短文章。Gadgets API 使用起来很简单,但文档确实有些模糊。

背景

小工具是使用 IGoogle 框架 的迷你应用程序,可以存在于其他网站内部。 简而言之,它是一个位于 iFrame 中的页面。

创建你的第一个小工具有几个步骤

  1. 注册沙盒。 注意:应用程序在沙盒中的行为与在 IGoogle 主页上的行为不同(看起来它们使用不同的 JS 库)。
  2. 添加开发者工具。 这些工具将保护你的小工具免受缓存的影响。
  3. 使用 在线编辑器 或任何其他编辑器来创建你的小工具。
  4. 发布你的小工具.

使用代码

完整的 Gadget 代码可以在 这里 找到。

我决定创建一个小工具,用于显示来自 Expedia.com 的特价商品。 在 Google 上搜索了几分钟后,我找到了我的小工具的数据源 - Expedia RSS Feed

IGoogle Gadget for Expedia Deals

这个小工具有两个展示部分

  • 一个用于配置小工具的表单;
  • 一个来自 feed 的条目列表;
<ModulePrefs 
   title="Travel Deals on Expedia" 
   description="Hot Travel Deals from Expedia.com. Cheap flights 
                and hotels, cruises and top deals." 
   title_url="http://www.expedia.com/daily/outposts/rss/expedia_rss.asp"
   author="Maxim Kazitov"
   author_email=mvkazit@tut.by
   screenshot="http://www.yogageneration.com/~mvkazit/expedia/iexpedia/screen.jpg" 
   thumbnail="http://www.yogageneration.com/~mvkazit/expedia/iexpedia/thumbnail.gif"
   directory_title="IG Expedia Hot Deals" 
   height="250"
   width="250">

   <icon>http://www.yogageneration.com/~mvkazit/expedia/iexpedia/icon.gif</icon>
   <Require feature="setprefs"/>
   <Require feature="dynamic-height"/>
</ModulePrefs>

在上面的代码中,我们正在设置未来小工具所需的所有设置,并在最后包含两个模块:“setprefs”和“dynamic-height”。 第一个模块允许我们以编程方式保存用户设置,第二个模块允许调整 IFrame 的高度(如果内容高度已更改)。

_IG_RegisterOnloadHandler(pgLoad);
function pgLoad()
{
    //...................
}

pgLoad 函数将被调用,并且页面将完成加载过程。 实际上,IG 框架将在 body 的末尾添加以下行。

_IG_TriggerEvent("domload");

注意:看起来 “registerOnLoadHandler()” 只能在沙盒中工作。

.................
var m_UsrPref   = new _IG_Prefs(__MODULE_ID__);
m_UsrPref.getBool("hasCfg"))
m_UsrPref.set("hasCfg", true);

读取/写入设置很容易,但你必须先声明这些设置。

现在,我们想读取 RSS feed

_IG_FetchFeedAsJSON(buildURL(), parseResponse);

function parseResponse(obj) 
{  
    var html = ""; 
      if(obj && obj.Entry)
    {
        var n = obj.Entry.length;
        for(var i=0; i<n; i++)
        {
            html+= buildEntryHTML(obj.Entry[i]);
        }
    }
    rssRender(html); 
}

框架将自动每隔 60 分钟左右刷新 feed。

注意:看起来 “gadgets.io.makeRequest()” 只能在沙盒中工作。 一般来说,gadgets.io* 函数仅在开发环境中工作,并且只有 _IG_* 真正有效。

_IG_AdjustIFrameHeight();

此调用将调整 IFrame 的大小以适应内容高度(同样,不要尝试使用 adjustHeight)。 现在,我们可以发布我们的小工具并 分享 给朋友。

© . All rights reserved.