跳到导航
BEA Dev2Dev Oracle and BEA
首页 资源中心 dev2dev学堂 在线技术论坛 User Group CodeShare
dev2dev 首页 > 资源中心 > 技术文章
更多的混搭:使用Greasemonkey将一些新特性编入Web站点

时间:2007-10-18
作者:Peter Laird
浏览次数:
本文关键字:mashup Greasemonkey 混搭 Web 2.0
文章工具
推荐给朋友 推荐给朋友
打印文章 打印文章

  在本文中,我将继续阐述如何帮助您利用工具建立混搭(mashup)这一主题。在本例中,我们介绍如何将Greasemonkey工具作为构建浏览器端混搭的有力方法。Greasemonkey是Firefox的一个插件,它允许脚本开发者把有用的Javascript注入到任何Web页面中。这一特性让您能够将新特性添加到不属于自己的站点中。在本文中,我将介绍如何将一些新特性添加到dev2dev Web站点中,而不必拥有dev2dev代码的访问权。随后,在后续的文章中将介绍如何利用同样的技术在引用了不同Web站点数据的dev2dev中创建特性,并产生正确的混搭。

使用Greasemonkey注入客户端代码

  Greasemonkey真是太棒了,它为我带来了很多的乐趣。它的运行原理很简单,但正是这种简单性交付了强大的功能。

  Javescript开发人员可以使用Greasemonkey编写脚本,然后添加到用户通过Firefox浏览器访问的Web页面中。这个脚本的确是无所不能,但是它通常用于将HTML元素注入到页面中或者更新页面中的HTML元素,从而为该Web站点创建全新的特性。目标Web站点不需要知道正在发生什么:当原始页面从Web服务器返回之后,Greasemonkey脚本会在浏览器中执行。

  考虑到实用性,Greasemonkey脚本通常都面向特定的Web站点,不过使用通用脚本也是可行的。开发人员可以指定哪些URL(带有通配符的)对于脚本有效。Firefox中的Greasemonkey插件程序将静默地监控用户所浏览的URL,并且在适当的时候注入脚本。

  明确的说,Greasemonkey不是默认安装的,您所编写的脚本也不是。无论是Greasemonkey,还是以后用户想要拥有的每一个脚本,安装与否都是由用户自行决定的。这就意味着Greasemonkey不像我已经讲过的其他混搭解决方案那样易于访问——此处的混搭不是URL。用户必须达到足够的熟练程度,才能安装Greasemonkey和自己的脚本。

  更多的混搭:使用Greasemonkey将一些新特性编入Web站点图-1

  Greasemonkey中的Hello World示例

  安装Greasemonkey的方法很简单:可以在Greasemonkey主页中找到下载链接。当然您需要使用Firefox,但是使用其他浏览器也不会出错。完成安装之后,下一步需要安装您的第一个Greasemonkey脚本。

  与网上的一些最先进的项目有所不同,Greasemonkey拥有众多优秀的文档。首先,获得介绍、指南及文档的最佳地方就是Mark Pilgrim撰写的在线书籍:Dive Into Greasemonkey。这本书的内容很容易理解,而且它可以让您很快就进入实践阶段。

  说到这一点,我将要展示的Greasemonkey中的Hello World 示例就正好出自Mark的这本书。下面的示例除了没有简短注解之外,其他方面与可从此处下载的 原始示例 是相同的。这个脚本以名为 helloworld.user.js 的公用文件提供。通过文件扩展名,我们可以看出它不过是一个JaveScript脚本。如果仔细看的话,您就会发现在注解中包含着许多元数据和一个对alert()的JaveScript函数调用。

  元数据很容易看懂:它指示Greasemonkey对所有(*)站点执行脚本,除了一些例外情况。如果您安装了Greasemonkey,则可以通过单击 helloworld.user.js 链接安装这个脚本,您将看到它会为每一个页面请求弹出一个警告框。

// Hello World! example user script
// version 0.1 BETA!
// 2005-04-22
// Copyright (c) 2005, Mark Pilgrim
// Released under the GPL license
// http://www.gnu.org/copyleft/gpl.html
// ==UserScript==
// @name          Hello World
// @namespace     http://diveintogreasemonkey.org/download/
// @description   example script to alert "Hello world!" 
// @include       *
// @exclude       http://diveintogreasemonkey.org/*
// @exclude       http://www.diveintogreasemonkey.org/*
// ==/UserScript==
alert('Hello world!');

  更多的混搭:使用Greasemonkey将一些新特性编入Web站点图-2

  Mr. Wong以及BE A dev2dev

  如果访问BEA dev2dev站点,您会注意到Jon在所有的文章和博客中都引用了流行的标记服务链接。这样可以允许我们利用del.icio.us、Digg、Dzone、Furl或Reddit快速地标记文章或博客。该站点目前的运行情况,请参见下图:

  更多的混搭:使用Greasemonkey将一些新特性编入Web站点图-3

  但是,如果所列的内容不能满足您的需求时怎么办呢?这就是我所面对的问题——我所使用的一个标记站点就没有列出来。顺便说一下,我一直在探究Web 2.0在中国的普及情况。在这项工作的过程中,我标记了一些自己找到的中文文章和一些有用的英文文章。我没有使用英文标记站点,而使用的是 Mr. Wong 这一中文标记站点。在浏览dev2dev站点时,我喜欢将Mr. Wong作为标记选项之一。但是,因为没有权力使用dev2dev的代码,所以我不能添加它。

使用Greasemonkey将Mr. Wong编入BEA dev2dev中

  登录Greasemonkey。

  在dev2dev中开发Mr. Wong特性的过程如下:

  • 访问dev2dev,查看博客和文章的HTML的源文件
  • 通过寻找带有class box_gray的最后一个div标记,可以很容易找到标记链接框(tagging links box)的记录
  • div标记中包含了一个简单的HTML表格,我们需要做的只是新加入一行
  • 建立到Mr. Wong的链接是很容易的:我们只需要知道文件名称和url。而这两样在JaveScript上都可以容易获取
  • 编写JaveScript!

  在展示脚本代码之前,请先查看一下最终效果:

  更多的混搭:使用Greasemonkey将一些新特性编入Web站点图-4

  如您所见,虽然没有使用dev2dev代码的权力,但是我仍然可以轻松地为它添加一个全新的特性!

  Mr. Wong脚本

  以下是用于向dev2dev站点添加此特性的脚本。但是,如果您想要试验一下,或查看现有版本的话,可以访问Greasemonkey的 脚本存储库(如果那个链接无效,请单击 此处)。安装名为dev2dv Mr Wong的脚本。代码大致遵循以下的步骤执行:

  • 在页面中找到最后一个box_gray div标记,这就是标记框
  • 在这个div中找到内部table
  • 在该表格中新添加一行
  • 在这个行中添加Mr. Wong的图像和链接
// ==UserScript==
// @name          dev2dev Mr Wong
// @namespace     http://dev2dev.bea.com
// @description   Injects a link to Mr Wong on each blog/article link
// @include       http://dev2dev.bea.com/blog/*
// @include       http://dev2dev.bea.com/pub/*
// ==/UserScript==
var divTagsWithClass, taggingDiv;
GM_log('Running dev2dev Mr Wong script');
// get the existing tagging div box 
//   by looking for the class (box_gray)
divTagsWithClass = document.evaluate(
    "//div[@class='box_gray']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);
// the tagging div appears last
taggingDiv = divTagsWithClass.snapshotItem(divTagsWithClass.snapshotLength-1);
if (taggingDiv)
{
          // find the table
          tableTag = taggingDiv.getElementsByTagName('table')[0];
          if (tableTag)
          {
                    // create the new row
                    var lastIndex = tableTag.rows.length;
                    newLinkTR = tableTag.insertRow(lastIndex);
                    
                    // create the td for image and set styles
                    var newLinkTD = newLinkTR.insertCell(0);
                    newLinkTD.valign = 'bottom';
                    newLinkTD.width = '20';
                    // build the HTML   
                    newLinkTD.innerHTML = '<img src='+
                               '"http://www.mister-wong.cn/favicon.ico"'+
                               ' alt="Mr. Wong" border="0" height="18" '+
                               'hspace="8" width="18">';
                    // create the td for the image
                    var newLinkTD = newLinkTR.insertCell(1);
                    // set the styles
                    newLinkTD.nowrap = 'nowrap';
                    newLinkTD.valign = 'bottom';
                    // build the HTML   
                    newLinkTD.innerHTML = 
                               '<a href="http://www.mister-wong.cn/index.php?'+
                               'action=addurl&v=1&bm_url='+
                               window.location+
                               '&bm_description='+
                               document.title+
                               '">'+
                               'Mr. Wong</a>';
          }
          else {
                    GM_log('  Error: did not find the tagging inner table');
          }
}
else {
          GM_log('  Error: did not find a tagging div');
}

优点与缺点

  希望您已经注意到Greasemonkey插件的强大性及其简易性。在后续文章中我将向您介绍如何进一步利用这项技术,即通过从其他站点注入数据来创建正确的混搭。下面是我总结的这个工具的优点及缺点:

  • 优点:对于开发者来说安装插件和脚本都相当容易
  • 优点:经验丰富的JaveScript开发者可以在很短的时间内创建出新特性
  • 优点:不需要拥有Web站点的代码使用权就能添加新特性
  • 优点:围绕Greasemonkey的文档和开发人员社区相当出色
  • 缺点:通过Greasemonkey创建的混搭不是确切的可访问的URL,它需要安装步骤
  • 缺点:除了Firefox以外,IE或任何其他的浏览器都不支持Greasemonkey
  • 缺点:这里还存在着一个重大的安全问题,我将在下一篇文章中讨论

参考资料

原文出处:http://dev2dev.bea.com/blog/plaird/archive/2007/07/mashups_using_g.html
 作者简介
icon
Peter Laird
Peter Laird 是BEA WebLogic Portal工程小组的一名高级架构师。目前,Peter致力于将企业门户技术与一些新兴的思想结合在一起,比如说混搭和面向服务架构。
dot dot dot

dot
  作者其它文章
您对本文的评价
您对这篇文章的看法如何?
太棒了!5分 不错啊 4分 一般般 3分 有待提高 2分 不好 1分