// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= HTML5 - Cordova 开发入门指南
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: HTML5 - Cordova 开发入门指南 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, HTML5 - Cordova 开发入门指南

|===
|此截屏视频介绍了 NetBeans IDE 中通过 Cordova 使用 HTML、JavaScript 和 CSS 为移动设备开发应用程序的支持。

link:http://bits.netbeans.org/media/html5-gettingstarted-cordova-final-screencast.mp4[+下载/观看全图+] (36 MB)

 

|有关在 NetBeans IDE 中使用 HTML5 应用程序的更多信息，请观看以下截屏视频。

* link:html5-gettingstarted-screencast.html[+ HTML5 - 第 1 部分：HTML5 应用程序入门+]
* link:html5-css-screencast.html[+ HTML5 - 第 2 部分：在 HTML5 应用程序中使用 CSS 样式表+]
* link:html5-javascript-screencast.html[+ HTML5 - 第 3 部分：在 HTML5 应用程序中测试和调试 JavaScript+]

link:/about/contact_form.html?to=3&subject=Feedback:%20Video%20of%20Getting%20Started%20with%20Cordova%20Applications[+发送有关此教程的反馈意见+]
 
|===


== 相关链接

* link:../webclient/cordova-gettingstarted.html[+Cordova 应用程序创建入门指南+]
* link:../webclient/html5-gettingstarted.html[+HTML5 应用程序入门 +]
* link:../webclient/html5-editing-css.html[+在 HTML5 应用程序中使用 CSS 样式表+]
* link:../webclient/html5-js-support.html[+在 HTML5 应用程序中调试和测试 JavaScript+]
* link:http://wiki.netbeans.org/HTML5[+NetBeans IDE 中的 HTML5 支持 Wiki 页+]
* link:../../trails/php.html[+PHP 和 HTML5 学习资源+]
