我已阅读并关注本网站或网站上有关如何使用Jquery Mobile将NativeControls插件添加到PhoneGap(Cordova 1.5)的教程。我无法让工具栏正常工作。
我尝试了许多不同的事情而没有运气。这是我的代码:
HTML:
<!DOCTYPE html>
<html>
<head>
<!--<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />-->
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<link rel="stylesheet" href="jquery/jquery.mobile-1.0.1.min.css"/>
<script src="jquery/jquery-1.6.4.min.js"></script>
<link rel="stylesheet" type="text/css" href="styles.css"/>
<script src="jquery/jquery.mobile-1.0.1.min.js"></script>
<title></title>
<!-- iPad/iPhone specific css below, add after your main css >
<link rel="stylesheet" media="only screen and (max-device-width: 1024px)" href="ipad.css" type="text/css" />
<link rel="stylesheet" media="only screen and (max-device-width: 480px)" href="iphone.css" type="text/css" />-->
<!-- If your application is targeting iOS BEFORE 4.0 you MUST put json2.js from http://www.JSON.org/json2.js into your www directory and include it here -->
<script type="text/javascript" charset="utf-8" src="cordova-1.5.0.js"></script>
<script src="NativeControls.js" type="text/javascript" charset="utf-8"></script>
<script src="js/main.js" type="text/javascript" charset="utf-8"></script>
</head>
<body onload="onBodyLoad()">
<div data-role="page" id="mainpage">
<div data-role="header">
<h1>LOGIN</h1>
</div>
<div data-role="content">
<img src="images/cslogosmall2.png" style="margin-top: -10px; margin-left: -5px;"/>
<form id="login" method="post">
<p>
<ul data-role="listview" data-theme="g" id="contentlist">
<b>Program:</b>
<input type="text" id="program"/>
<b>Username:</b>
<input type="text" id="username"/>
<b>Password:</b>
<input type="password" id="password"/>
</ul>
</p>
<br/>
<button type="submit" data-theme="a" id="submit" value="Submit"></button>
</form>
</div>
<!--<div data-role="footer">
<h1> Main Page Footer </h1>
</div>-->
</div>
<div data-role="page" id="contentpage">
<div data-role="header">
<h1> Content Page </h1>
</div>
<div data-role="content">
<a href="#" data-role="button" onclick="history.go(-1);return false;" onClick=buttonDemo()> Back to Main Page </a>
<a href="#" data-role="button" id="beepbtn" onClick=beepbeep()> Beep!</a>
</div>
<div data-role="footer">
<h1> Content Page Footer </h1>
</div>
</div>
</body>
</html>
main.js:
function onBodyLoad()
{
$('#submit').click(function() {
var program = document.getElementById('program').value;
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
if (!program || program == "") {
alert("Please enter a program");
return false;
}
else if (!username || username == "") {
alert("Please enter a username");
return false;
}
else if (!password || password == "") {
alert("Please enter a password");
return false;
}
return true;
});
document.addEventListener("deviceready", onDeviceReady, false);
}
/* When this function is called, Cordova has been initialized and is ready to roll */
/* If you are supporting your own protocol, the var invokeString will contain any arguments to the app launch.
see http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
for more details -jm */
function onDeviceReady() {
// Initializating TabBar
navigator.notification.alert("Cordova is working");
nativeControls = window.plugins.nativeControls;
navigator.notification.alert(nativeControls);
nativeControls.createTabBar();
// Books tab
nativeControls.createTabBarItem(
"books",
"Books",
//"/www/tabs/book.png",
"",
{"onSelect": function() {
books();
}}
);
// Stats tab
nativeControls.createTabBarItem(
"finished",
"Finished",
//"/www/tabs/box.png",
"",
{"onSelect": function() {
finished();
}}
);
// About tab
nativeControls.createTabBarItem(
"about",
"About",
//"/www/tabs/info.png",
"",
{"onSelect": function() {
about();
}}
);
// Compile the TabBar
nativeControls.showTabBar();
nativeControls.showTabBarItems("books", "finished", "about");
nativeControls.selectTabBarItem("books");
}
function books() {
}
function about() {
}
function finished(){
}
如你所见,我做了一个:
navigator.notification.alert("Cordova is working");
nativeControls = window.plugins.nativeControls;
navigator.notification.alert(nativeControls);
nativeControls.createTabBar();
测试nativeControls变量是否包含任何内容。我没有得到任何警报。 我甚至尝试过:
navigator.notification.alert(window);
没有运气。我已将NativeControls键添加到Cordova.plist中
NativeControls - NativeControls。
非常感谢任何帮助!
答案 0 :(得分:6)
我将源代码上传到iTunes商店的jQM应用程序,该应用程序在两个方向上都有一个Tabbar工作在iPhone和iPad上的示例。我希望它有所帮助!!
http://zsprawl.com/iOS/2012/04/nativecontrols-plugin-for-cordovaphonegap/
答案 1 :(得分:4)
我也遭受了同样的挣扎。构造函数可能存在一些误解。
我看到了a post,其中添加了额外的几行以避免任何冲突,并且它有效!
答案 2 :(得分:4)
这是我的代码,它有效:
function onDeviceReady()
{
var nc = window.plugins.nativeControls;
nc.createTabBar();
nc.createTabBarItem('whoTabItem', 'Quem?', '', null);
nc.createTabBarItem('whereTabItem', 'Onde?', '', null);
nc.createTabBarItem('whatTabItem', 'O que?', '', null);
nc.showTabBar();
nc.showTabBarItems('whoTabItem', 'whereTabItem', 'whatTabItem');
}
在NativeControls.js的最后,window.plugins.nativeControls被初始化,所以应该没问题:
if(!window.plugins)
window.plugins = {};
window.plugins.nativeControls = new NativeControls();
您对createTabBarItem的调用有5个参数 - 它只有4个。消除第四个空白参数并进行测试。也许这就是你的onSelect功能不起作用的原因。
答案 3 :(得分:0)
您需要在main.js文件的顶部将 nativeControls 定义为变量,然后您可以在此行中使用它,否则,js将通过关于未定义变量的异常
nativeControls = window.plugins.nativeControls;