本网站只能被运行在支持JavaScript脚本的环境中

开源许可证的选择方法

本节概述

在开发Web网站时,JavaScript框架为一种必不可少的工具。通过JavaScript框架的灵活使用,可以快速开发非常漂亮的应用程序界面。本节介绍开源许可证的选择方法。

什么是开源许可证

目前市场上的所谓开源框架并非完全没有限制。最基本的限制,就是开源框架强迫任何使用和修改该框架的人承认发起人的著作权和所有参与人的贡献。任何人拥有可以自由复制、修改、使用这些框架源代码的权利,不得设置针对任何人或团体领域的限制。不得限制开源框架的商业使用等。而许可证就是这样一个保证这些限制的法律文件。目前主要的开源许可证分为以下四种:

  • BSD许可证
  • MIT许可证
  • GNU GPL(General Public License)许可证
  • Apache许可证

BSD许可证

BSD许可证原先是用在加州大学柏克利分校发表的各个4.4BSD/4.4BSD-Lite版本上面(BSD是Berkly Software Distribution的简写)的,后来也就逐渐沿用下来。1979年加州大学伯克利分校发布了BSD Unix,被称为开放源代码的先驱,BSD许可证就是随着BSD Unix发展起来的。BSD许可证现在被Apache和BSD操作系统等开源软件所采纳。

根据版权声明、BSD许可证条约、免责声明中的记载,BSD许可证的使用者有权使用或重新部署开源软件的源代码,不管使用者是否对源代码做出了修改。

未经书面许可,开源软件的衍生软件(即使用开源软件开发出来的软件)不得以许可证中记载的组织或贡献者的名义进行宣传与销售。

与许可证一起公布的软件作者不承担与软件相关的义务或责任。

在BSD许可证的初期阶段,在衍生软件的广告中必须介绍开源软件的开发者。目前这一条约已被删除。衍生软件的开发者不承担介绍开源软件的开发者的义务。

MIT许可证

MIT许可证之名源自麻省理工学院(Massachusetts Institute of Technology, MIT)。

许可证使用者可以无条件复制、修改、重新部署、销售开源软件。

必须在软件所有副本或其他重要场所中记载版权声明及许可声明。

与许可证一起公布的软件作者不承担与软件相关的义务或责任。

衍生软件的开发者不承担介绍开源软件的义务。

GNU GPL许可证

GNU GPL许可证为Richard Matthew Stallman为GNU Project而创建的许可证。目前被广泛使用的为2.0版本与3.0版本。

GNU GPL许可证不对开源软件的使用者承担担保义务。

必须对开源软件进行复制、修改、重新部署等处理。

必须对衍生软件的使用者提供开源代码。

另外,也具有一个降低使用条件的GNU LGPL(Lesser General Public License)许可证2.1版本与3.0版本。

Apache许可证

Apache许可证为Apache软件基金会发布的软件许可证。

许可证使用者可以无条件使用、发布、修改开源软件,可以无条件发布衍生软件,Apache许可证要求被授权者保留版权和放弃权利声明,但不要求衍生软件必须为免费或开源软件。

虽然在Apache许可证1.1版中定义了许多广告条款,但是在最新版Apache License 2.0中这些广告条款已被废除。目前Apache License 2.0与GNU GPL 3.0版互相兼容。因此,可以发布适用于任何一个许可证的衍生软件。

在使用开源框架之前,首先需要确认开源框架的许可证。在使用软件之前,首先需要阅读The Open Source Initiative网页上公布的声明以及与软件相捆绑的许可证文件。

Web开发时可以使用的JavaScript框架

目前世界上存在许多在进行Web开发时可以使用的非常优秀的JavaScript框架,其中jQuery为目前市场份额最高的一个框架。这些JavaScript框架如下所示。

  • jQuery
  • Sencha
  • Dojo
  • Yahoo UI

jQuery

jQuery为John Resig带领开发的一个JavaScript框架,使用MIT许可证进行发布。可以通过它来书写语法简单,与众多Web浏览器相兼容的客户端脚本代码。

//实现在获取天气信息中提交邮编参数的Ajax处理
$.ajax({
    url: "/api/getWeather",
    data: {
        zipcode: 97201
    },
    success: function(data) {
        $("#weather-temp").html(""+data+"degrees");
    }
});

自jQuery 2.0开始摒弃向前兼容,不支持Internet Explorer 6 ~ 8浏览器。在已使用jQuery的Web网站中当改用jQuery 2.0之后的版本时,需要注意首先将目前Web网站进行升级。

Sencha

Sencha Ext JS为Sencha公司提供的一个JavaScript框架,其特征为提供了许多非常美丽的组件,可用于设计一个具有现代风格的Web网站。

//在Sencha Ext JS中结合使用XML与Ajax实现一个表单
Ext.require([
    'Ext.form.*',
    'Ext.data.*'
]);
Ext.define('example.contact', {
    extend:'Ext.data.Model',
    fields: [
        {name: 'first', mapping: 'name>first'},
        {name: 'last', mapping: 'name>last'},
         'company', 'email', 'state',
       {name: 'dob', type: 'date', dateFormat: 'm/d/Y'}
    ]
});
Ext.define('example.fielderror', {
    extend:'Ext.data.Model',
    fields:['id','msg']
});
Ext.onReady(function(){
    var formPanel = new Ext.form.Panel({
        renderTo: 'form-ct',
        frame: true,
        title:'XML Form',
        width: 340,
        bodyPadding: 5,
        waitMsgTarget: true,
        fieldDefaults: {
            labelAlign: 'right',
            labelWidth: 85,
            msgTarget: 'side'
        },
        // configure how to read the XML data, using an instance
        reader : new Ext.data.reader.Xml({
            model: 'example.contact',
            record : 'contact',
            successProperty: '@success'
        }),
        // configure how to read the XML error, using a config
        errorReader: {
            type: 'xml',
            model: 'example.fielderror',
            record : 'field',
            successProperty: '@success'
        },
        items: [{
            xtype: 'fieldset',
            title: 'Contact Information',
            defaultType: 'textfield',
            defaults: {
                width: 280
            },
            items: [{
                fieldLabel: 'First Name',
                emptyText: 'First Name',
                name: 'first'
            },{
                fieldLabel: 'Last Name',
                emptyText: 'Last Name',
                name: 'last'
            },{
                fieldLabel: 'Company',
                name: 'company'
            },{
                fieldLabel: 'Email',
                name: 'email',
                vtype:'email'
            },{
                xtype: 'combobox',
                fieldLabel: 'State',
                name: 'state',
                store: Ext.create('Ext.data.ArrayStore', {
                    fields: ['abbr', 'state'],
                    data : Ext.example.states // from states.js
                }),
                valueField: 'abbr',
                displayField: 'state',
                typeAhead: true,
                queryMode: 'local',
                emptyText: 'Select a state...'
            },{
                xtype: 'datefield',
                fieldLabel: 'Date of Birth',
                name: 'dob',
                allowBlank: false,
                maxValue: new Date()
            }]
        }],
        buttons: [{
            text: 'Load',
            handler: function(){
                formPanel.getForm().load({
                    url: 'xml-form-data.xml',
                    waitMsg: 'Loading...'
                });
            }
        }, {
            text: 'Submit',
            disabled: true,
            formBind: true,
            handler: function(){
                this.up('form').getForm().submit({
                    url: 'xml-form-errors.xml',
                    submitEmptyText: false,
                    waitMsg: 'Saving Data...'
                });
            }
        }]
    });
});

Sencha Ext JS目前使用GNU GPL许可证3.0版本与商用许可证这双重许可证来公布。

Dojo

Dojo Toolkit为Alex Russell、Dylan Schiemann、David Schontzler等共同开发的JavaScript框架。目前由Dojo基金会组织开发维护。

//使用JSONP实现Ajax处理
require(["dojo/dom", "dojo/on", "dojo/request/script","dojo/json", "dojo/domReady!"],
function(dom,on,script,JSON){
    // Results will be displayed in resultDiv
    var resultDiv = dom.byId("resultDiv");
   // Attach the onclick event handler to the makeRequest button
    on(dom.byId('makeRequest'),"click", function(evt){
        // When the makeRequest button is clicked, send the current
        // date and time to the server in a JSONP request
        var d = new Date(),
        dateNow = d.toString();
        script.get("../resources/php/jsonp-demo.php",{
            // Tell the server that the callback name to
            // use is in the "callback" query parameter
            jsonp: "callback",
            // Send the date and time
            query: {
                clienttime: dateNow
            }
        }).then(function(data){
            // Display the result
            resultDiv.innerHTML = JSON.stringify(data);
        });
    });
});

Dojo Toolkit目前使用BSD许可证与Academic Free许可证2.1版本这双重许可证来公布。

Yahoo UI

Yahoo UI(YUI)为Yahoo!公布的JavaScript框架,通过BSD许可证来发布。

//实现从天气信息的RSS(XML)中获取信息的Ajax处理
//Define a function to handle a successful response from
//Yahoo! Weather.  The success handler will find the response
//object in its second argument:
function successHandler(id, o){
    Y.log("Success handler called; handler will parse the retrieved XML and insert into DOM.", "info", "example");
    var root = o.responseXML.documentElement;
    var oTitle = root.getElementsByTagName('description')[0].firstChild.nodeValue;
    var oDateTime = root.getElementsByTagName('lastBuildDate')[0].firstChild.nodeValue;
    var descriptionNode = root.getElementsByTagName('description')[1].firstChild.nodeValue;
    div.set("innerHTML", "
    "+oTitle+"

    "+"
    "+oDateTime+"

    "+descriptionNode);

    Y.log("Success handler is complete.", "info", "example");
}

智能手机与平板电脑用开源框架

目前在开发智能手机与平板电脑用Web网站时,可以使用如下所示的开源框架来快速开发一个具有美观视觉效果的Web网站。

  • jQuery Mobile
  • Sencha Touch
  • jQT
  • Dojo Mobile
  • Wink toolkit
  • Kendo UI Mobile

jQuery Mobile

jQuery Mobile为一个以jQuery为基础,加强移动设备用Web开发功能的JavaScript框架。支持Adobe Dreamweaver CS 5.5以后版本。 其特性为在HTML 5中以“data-”为前缀的属性名中添加jQuery Mobile中的特定值以构建美丽的应用程序界面。


页面布局

表单

网格布局
工具条

Sencha Touch

Sencha Touch与Sencha Ext JS相同,均为提供了大量美观组件的JavaScript框架。其特征为使用MVC框架,提供模板引擎。


表单

列表

工具条

Tab面板

与Sencha Ext JS相同,使用GNU GPL许可证3.0版本与商用许可证这双重许可证来公布。

jQT

jQT为一个Zepto/jQuery插件,加强移动设备用Web开发功能。由David Kaneda开发,使用MIT许可证来公布,现在为Sencha Labs中的一部分,其前身为jQTouch。


表单

列表

按钮

与jQuery Mobile不同,通过对div元素指定id与class来创建页面或各种组件。

Dojo Mobile

Dojo Mobile以Dojo Toolkit为基础,加强移动设备用Web开发功能。针对各种设备提供了丰富的具有本地应用程序风格的Web组件及样式主题。


表单

手风琴面板

统计图绘制

Wink toolkit

Wink toolkit为Dojo基金会组织开发与公布的移动设备用Web开发框架。使用BSD许可证进行发布。与Dojo Mobile相同,针对iOS与Android操作系统提供本地应用程序风格的Web组件及样式主题。


列表

可折叠面板

Tab面板

模式菜单

其特征为可以捕捉移动设备中的各种特定事件,同时充满了各种特效。

Kendo UI Mobile

Kendo UI Mobile为Telerik公司提供的一个移动设备用Web开发框架。以Kendo UI框架为基础。


列表

表单

iPhone中的分割视图
iPad中的分割视图

Kendo UI使用GNU GPL许可证3.0版本与商用许可证这双重许可证来公开。目前,Kendo UI Mobile只使用商用许可证来公开。

如何挑选使用开发框架

针对在上述众多开发框架中,如何挑选自己适用的开发框架来说,可以考虑以下几个因素:

  • 选择使用公司内开发团队所熟悉使用的框架。
  • 针对客户需求(客户使用的Web浏览器、客户喜欢的设计风格或应用程序界面,客户提供的Web网站的运行环境等等)挑选相匹配的开发框架。
  • 针对所开发的Web网站中应该具备的界面、功能或特性来选择相匹配的框架。

在选择使用开发框架时,一个不应该被忘记的考虑因素是Web网站的向后兼容性。在多数场合下,Web网站或Web应用程序并不是一个一次创建的过程。首次创建的Web网站或Web应用程序只是一个起点,在实际投入应用后还需要不断对其维护,进行各种页面或功能的修改或增删。因此在选择一个开发框架时,需要对该开发框架所能提供的特性或功能具有比较深入的了解。