http://blog.sina.com.cn/s/blog_537517170102w5vj.html 源地址
1、No Content-Security-Policy meta tag found. Please add one when using the cordova-plugin-whitelist plugin.
解決辦法
index.html 中添加
《meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"》
2、ionic 隱藏 nav-bar
文檔上來(lái)看,需要在controller中調(diào)用 <wbr> $ionicNavBarDelegate 例如 .controller('DashCtrl', function ($scope, $ionicNavBarDelegate) { <wbr> <wbr> <wbr> $ionicNavBarDelegate.showBar(false); }) 但沒(méi)起作用。最后在模板中使用標(biāo)簽方法 <a name="baidusnap4" style="text-decoration: underline; color: rgb(118, 95, 71);"></a>hide-nav-bar = "true"
該方法起作用。
3、 ng-model 與 input 值的問(wèn)題
例如 <wbr> <wbr> input type="text" ng-model="querystr"
ng-model綁定到$scope.querystr 時(shí),model會(huì)根據(jù) text輸入自動(dòng)變化,但在controller中將
$scope.querystr=''時(shí) ,text input的值不會(huì)產(chǎn)生變化。
并且在使用ng-model時(shí),無(wú)法使用
angular.element(document).find(selector).val("some value");方式進(jìn)行賦值。
解決方法是在controller 中,設(shè)置一個(gè)結(jié)構(gòu),如
$scope.queryMode ={querystr:''};
在input 中綁定 <wbr> ng-model = "queryModel.querystr"
則controller中重設(shè) <wbr> <wbr> $scope.queryMode.querystr = '';
綁定生效,input 清空。
4、cordova插件 ,在ripple中彈出錯(cuò)誤窗口
如果安裝cordova插件,如keyboard,statusbar 等, 會(huì)在ripple中拋各種錯(cuò),并且每次加載會(huì)彈出窗口,讓你寫(xiě)JSON回調(diào), 這個(gè)是ripple的BUG,不支持自定義插件, 去掉彈窗的辦法是在app.js上方,即定義angular.module()的上方
寫(xiě)
var annoyingDialog = parent.document.getElementByIdx_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x_x('exec-dialog');
上句中的x_x 去掉,新浪自動(dòng)添加的。
if (annoyingDialog) annoyingDialog.outerHTML = "";
彈窗將不再出現(xiàn),但輸出窗口中的ripple.js中的錯(cuò)誤仍會(huì),你可以過(guò)濾,也可以不管。
5、使用極光推送,按照github上的說(shuō)明文檔,加入插件后總是無(wú)法編譯,查看
是由于 platform/android/AndroidManifest.xml <wbr>中
meta-data android:name=JPUSH_APPKEY android:value=aaabbbbmn9QITAv0Oe
重復(fù),每次build總會(huì)生成兩條鍵值
經(jīng)查在plug/android.json 中,有兩條重復(fù)生成的語(yǔ)句,刪掉一個(gè),即可。
6、ionic關(guān)于IFAME的調(diào)用
因?yàn)槭褂玫谌浇涌?,?huì)造成跑到應(yīng)用外的地址,ionic無(wú)法控制外部連接回到應(yīng)用,因此一般使用iframe方式
打開(kāi)外部連接,并加一個(gè)headbar用來(lái)返回到應(yīng)用,如在modal中打開(kāi)外部地址
如html中
<wbr>《script id="login.html" type="text/ng-template"》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《ion-modal-view》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《ion-header-bar align-title="center" class="bar-positive"》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《div class="buttons"》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《button <wbr> class="button button-clear button-icon icon ion-ios-arrow-back"》《/button》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《button ng-click="closeModal()" class="button button-clear button-icon icon "》取消《/button》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《/div》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《h1 class="title"》LOGIN《/h1》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《/ion-header-bar》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《ion-content scroll="true" class="has-header no-padding"》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《iframe id="ifmr2" data-tap-disabled="true" ng-src="{{chatStru.paySrc}}"》《/iframe》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《/ion-content》
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> 《/ion-modal-view》
《/script》
controller中
$scope.tt = new Date().getMilliseconds();
$scope.chatStru = {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> paySrc: $sce.trustAsResourceUrl('http://xxx.om/testlogin.jsp?tt='+$scope.tt),
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> token: "",
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> hasToken: false
<wbr> <wbr> <wbr> };
$ionicModal.fromTemplateUrl('login.html', {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> scope: $scope,
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> animation: 'slide-in-up'
<wbr> <wbr> <wbr> }).then(function (modal) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal = modal;
<wbr> <wbr> <wbr> });
<wbr> <wbr> <wbr> $scope.openModal = function () {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.show();
<wbr> <wbr> <wbr> };
<wbr> <wbr> <wbr> <wbr> $scope.closeModal = function () {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> };
但這樣的問(wèn)題是在于,頁(yè)面完成后,你必須通過(guò)手動(dòng)點(diǎn)擊返回,并且無(wú)法進(jìn)行數(shù)據(jù)的傳遞,這個(gè)在html5中其實(shí)已經(jīng)有了非常完美的解決方法就是postMessage()
在遠(yuǎn)端的被iframe的頁(yè)面中,加入JS
window.onload=function(){
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> window.parent.postMessage('logined','*');
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
并在inoic的controller中加入
<wbr>window.addEventListener('message', function (e) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var data = e.data;
//這里返回的是 logined,相當(dāng)于傳遞參數(shù)回來(lái)。
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> }, false);
<wbr> 你會(huì)發(fā)現(xiàn),你即接收到了data,同時(shí)又關(guān)閉了該modal ,而不需要手動(dòng)關(guān)閉。
當(dāng)然,你可以將 addEventListener() 放到 <wbr>$scope.openModal <wbr>
然后在 $scope.closeModal 中 removeEventListener()
如
<wbr>$scope.openModal = function () {
<wbr> <wbr> <wbr> <wbr> var tt = new Date().getMilliseconds();
<wbr> <wbr> <wbr> <wbr> $scope.chatStru.paySrc = $sce.trustAsResourceUrl('http://xxx.cn/oe/testlogin.jsp?tt=' + tt);
<wbr> <wbr> <wbr> <wbr> $scope.modal.show();
<wbr> <wbr> <wbr> <wbr> window.addEventListener('message', function (e) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var data = e.data;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.chatStru.hasToken = true;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> <wbr> }, false);
<wbr> <wbr> };
<wbr> <wbr> // function to close the modal
<wbr> <wbr> $scope.closeModal = function () {
<wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> <wbr> if ($scope.chatStru.hasToken) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> window.removeEventListener('message', function () { }, false);
<wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> };
最終可以這樣寫(xiě)
<wbr>var handel = function (e) {
<wbr> <wbr> <wbr> <wbr> var data = e.data;
<wbr> <wbr> <wbr> <wbr> if (data.id > 0) { <wbr>// 傳回來(lái)的為json{id:1,msg:'aaa'}
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> if (!$scope.chatStru.hasToken) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.chatStru.hasToken = true;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> <wbr> } else {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.chatStru.hasToken = false;
<wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> };
<wbr> <wbr> $scope.openModal = function () {
<wbr> <wbr> <wbr> <wbr> var tt = new Date().getMilliseconds();
<wbr> <wbr> <wbr> <wbr> $scope.chatStru.paySrc = $sce.trustAsResourceUrl('http://xxx.cn/oe/testlogin.jsp?tt=' + tt);
<wbr> <wbr> <wbr> <wbr> $scope.modal.show();
<wbr> <wbr> <wbr> <wbr> if (!$scope.chatStru.hasToken) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> window.addEventListener('message', handel, false);
<wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> };
<wbr> <wbr> <wbr>
<wbr> <wbr> $scope.closeModal = function () {
<wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> <wbr> if ($scope.chatStru.hasToken) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> window.removeEventListener('message', handel, false);
<wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> };
7、使用android studio 運(yùn)行cordova項(xiàng)目
直接使用platfrom目錄里的gradle 可以在android studio中直接導(dǎo)入 cordova的項(xiàng)目,但運(yùn)行模擬器時(shí)出現(xiàn)
Cannot <wbr>reload <wbr>AVD <wbr>list: <wbr>cvc-enumeration-valid: <wbr>Value <wbr>'280dpi' <wbr>is <wbr>not <wbr>facet-valid <wbr>with <wbr>respect <wbr>to <wbr>enumeration <wbr>'[ldpi, <wbr>mdpi, <wbr>tvdpi, <wbr>hdpi, <wbr>xhdpi, <wbr>400dpi, <wbr>xxhdpi, <wbr>560dpi, <wbr>xxxhdpi]'. <wbr>It <wbr>must <wbr>be <wbr>a <wbr>value <wbr>from <wbr>the <wbr>enumeration.
Error <wbr>parsing <wbr>D:\sdkforas\android-sdk-windows\system-images\android-22\android-wear\armeabi-v7a\devices.xml
cvc-enumeration-valid: <wbr>Value <wbr>'280dpi' <wbr>is <wbr>not <wbr>facet-valid <wbr>with <wbr>respect <wbr>to <wbr>enumeration <wbr>'[ldpi, <wbr>mdpi, <wbr>tvdpi, <wbr>hdpi, <wbr>xhdpi, <wbr>400dpi, <wbr>xxhdpi, <wbr>560dpi, <wbr>xxxhdpi]'. <wbr>It <wbr>must <wbr>be <wbr>a <wbr>value <wbr>from <wbr>the <wbr>enumeration.
Error <wbr>parsing <wbr>D:\sdkforas\android-sdk-windows\system-images\android-22\android-wear\x86\devices.xml
解決方法 :
用/sdk/tools/lib/devices.xml去替換 system-images\android-22\android-wear\x86\devices.xml和system-images \android-22\android-wear\armeabi-v7a\devices.xml中的devices.xml
8、 android studio 中 gradle 失敗
gradle <wbr>project <wbr>sync <wbr>failed.Basic <wbr>functionality(e.g.editing,debugging) <wbr>will <wbr>not <wbr>work <wbr>properly.
解決方法:android <wbr>studio中,點(diǎn)擊 <wbr>tools <wbr>->Android->sync <wbr>project <wbr>with <wbr>gradles <wbr>files.
9、加載遠(yuǎn)程js或css 出現(xiàn) Refused to load the script <wbr> 或 Refused to load the stylesheet
because it violates the following ....
例如 index.html中 加載字體
《link href='http://fonts.useso.com/css?family=RobotoDraft:400,500,700,400italic' rel='stylesheet'》
可在index.html添加安全許可
《meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline' http://fonts.useso.com ; script-src 'self' 'unsafe-inline' 'unsafe-eval';"》
直接加根域名即可,另外不要帶引號(hào) js <wbr> 需要添加在 script-src 中。
10 、 ionic 中 彈出鍵盤(pán)遮擋住輸入框
在config.xml 中修改全屏為FALSE并添加 <wbr> adjustPan <wbr> (adjstResize沒(méi)有成功)
<wbr>《preference name="Fullscreen" value="False" /》
<wbr> 《preference name="android-windowSoftInputMode" value="adjustPan"/》
11、ionic監(jiān)聽(tīng)滾動(dòng)
網(wǎng)上的示例xxx.bind('scroll',function(){.....}),很容易將頁(yè)面跑死, 換個(gè)思路,使用監(jiān)聽(tīng)touch
var targetPos = window.screen.availHeight;
<wbr>$("#scdiv").on("touchend", function () {
if (currpos > 10 && currpos < targetPos / 4) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $ionicScrollDelegate.$getByHandle('homescroll').scrollTo(0, 0, true);
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return false;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> } else if (currpos >= targetPos / 4 && currpos <= targetPos - 10) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $ionicScrollDelegate.$getByHandle('homescroll').scrollTo(0, targetPos - 64, true);
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return false;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
})
當(dāng)觸摸結(jié)束時(shí),判斷當(dāng)前的位移,來(lái)做一些操作。這樣在性能上提高了許多。
$ionicScrollDelegate.$getByHandle 操作的是在html中定義的delegate-handle
如《ion-content id="scdiv" delegate-handle="homescroll"》
12、 APP開(kāi)啟檢測(cè)網(wǎng)絡(luò)并提示開(kāi)啟
需要三個(gè)插件
1、https://github.com/apache/cordova-plugin-network-information
2、https://github.com/apache/cordova-plugin-dialogs
3、https://github.com/deefactorial/Cordova-open-native-settings
然后在APP.JS中,divicesReady中
$ionicPlatform.ready(function () {
if (navigator.connection) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var tmptypes = navigator.connection.type;
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> if (tmptypes.toUpperCase().indexOf('NONE') > -1 || tmptypes.toUpperCase().indexOf('UNKNOWN') > -1) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> if (navigator.notification) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> navigator.notification.confirm(
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> '您的設(shè)備未開(kāi)啟網(wǎng)絡(luò)',
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> function (buttonIndex) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> if (buttonIndex == 1) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> if (cordova.plugins.settings) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> cordova.plugins.settings.openSetting("wifi", function () { console.log("network setting openning"); }, function () { console.log("open network setting failed"); });
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }, <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> // callback to invoke with index of button pressed
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> '提示', <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> // title
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> ['開(kāi)啟', '取消'] <wbr> <wbr> <wbr> <wbr> // buttonLabels
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> );
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
})
其中openSettings中可設(shè)置以下本地設(shè)置
var <wbr>settingNames <wbr>= <wbr>array(
<wbr> <wbr> <wbr> <wbr>"open",
<wbr> <wbr> <wbr> <wbr>"accessibility",
<wbr> <wbr> <wbr> <wbr>"add_account",
<wbr> <wbr> <wbr> <wbr>"airplane_mode",
<wbr> <wbr> <wbr> <wbr>"apn",
<wbr> <wbr> <wbr> <wbr>"application_details",
<wbr> <wbr> <wbr> <wbr>"application_development",
<wbr> <wbr> <wbr> <wbr>"application",
<wbr> <wbr> <wbr> <wbr>"bluetooth",
<wbr> <wbr> <wbr> <wbr>"captioning",
<wbr> <wbr> <wbr> <wbr>"cast",
<wbr> <wbr> <wbr> <wbr>"data_roaming",
<wbr> <wbr> <wbr> <wbr>"date",
<wbr> <wbr> <wbr> <wbr>"device_info",
<wbr> <wbr> <wbr> <wbr>"display",
<wbr> <wbr> <wbr> <wbr>"dream",
<wbr> <wbr> <wbr> <wbr>"home",
<wbr> <wbr> <wbr> <wbr>"input_method",
<wbr> <wbr> <wbr> <wbr>"input_method_subtype",
<wbr> <wbr> <wbr> <wbr>"internal_storage",
<wbr> <wbr> <wbr> <wbr>"locale",
<wbr> <wbr> <wbr> <wbr>"location_source",
<wbr> <wbr> <wbr> <wbr>"manage_all_applications",
<wbr> <wbr> <wbr> <wbr>"manage_applications",
<wbr> <wbr> <wbr> <wbr>"memory_card",
<wbr> <wbr> <wbr> <wbr>"network_operator",
<wbr> <wbr> <wbr> <wbr>"nfcsharing",
<wbr> <wbr> <wbr> <wbr>"nfc_payment",
<wbr> <wbr> <wbr> <wbr>"nfc_settings",
<wbr> <wbr> <wbr> <wbr>"print",
<wbr> <wbr> <wbr> <wbr>"privacy",
<wbr> <wbr> <wbr> <wbr>"quick_launch",
<wbr> <wbr> <wbr> <wbr>"search",
<wbr> <wbr> <wbr> <wbr>"security",
<wbr> <wbr> <wbr> <wbr>"settings",
<wbr> <wbr> <wbr> <wbr>"show_regulatory_info",
<wbr> <wbr> <wbr> <wbr>"sound",
<wbr> <wbr> <wbr> <wbr>"sync",
<wbr> <wbr> <wbr> <wbr>"usage_access",
<wbr> <wbr> <wbr> <wbr>"user_dictionary",
<wbr> <wbr> <wbr> <wbr>"voice_input",
<wbr> <wbr> <wbr> <wbr>"wifi_ip",
<wbr> <wbr> <wbr> <wbr>"wifi",
<wbr> <wbr> <wbr> <wbr>"wireless");
其中相關(guān)網(wǎng)絡(luò)的為wifi <wbr> 移動(dòng)數(shù)據(jù)開(kāi)啟未找到。誰(shuí)試出了是哪個(gè)請(qǐng)告訴我
13、$sate.go <wbr> 和 $stateParams 傳參及收參
在 controller1 中使用 <wbr> $state.go('statename',{id:1}) ;傳遞參數(shù)
在 statename 相對(duì)應(yīng)的 <wbr> controller2 中接收參數(shù)
$scope.id = $stateParams.id;
注意,此處必須在router.js 中設(shè)置 statename 的參數(shù)形式
如.state('statename ', {
<wbr> <wbr> <wbr> url: '/statename ',
<wbr> <wbr> <wbr> params: { 'id': null },
<wbr> <wbr> <wbr> templateUrl: 'templates/Users/statename .html',
<wbr> <wbr> <wbr> controller: 'controller2 '
})
其中params: { 'id': null }, 對(duì)應(yīng)$state傳的參,若不設(shè),則必為undefined
14、關(guān)于ionic中想底部加一長(zhǎng)按鈕,隨頁(yè)面滾動(dòng)位置不變,例如
最初的方案是在 ion-content <wbr> 外 ion-view 內(nèi)添加一層
div .....style= ..... position:fixed <wbr> <wbr> <wbr> bottom:0px;之類(lèi),但最終發(fā)現(xiàn),在不同分辨率下位置并不正確
基本可確定是因?yàn)閟tatusbar等的緣故,仔細(xì)看了下ionic.css最終發(fā)現(xiàn),太簡(jiǎn)單了
div class="tabs" <wbr> 就可以了。
15、php中取值問(wèn)題
ionic中用的$http <wbr> method:post ,params........在PHP中用$_POST取不到值, 改成 $_Request 就行了。
16、使用vs2015 release
會(huì)提示使用發(fā)布配置進(jìn)行調(diào)試時(shí),Android 程序包必須已簽名。要配置 Android 簽名,請(qǐng)按照 http://go.microsoft.com/fwlink/?LinkID=613579 中的說(shuō)明操作(該網(wǎng)頁(yè)很難打開(kāi))
實(shí)際需要在項(xiàng)目根目錄的build.json中添加生成的keystore
{
<wbr> <wbr> <wbr> <wbr> "android": {
<wbr> <wbr> <wbr> <wbr> <wbr> "release": {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> "keystore": "E:\Projects\android.keystore",
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> "storePassword": "*******",
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> "alias": "********",
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> "password": "*******",
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> "keystoreType": ""
<wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> }
<wbr>}
至于生成keystore 請(qǐng)百度,只要有jdk 運(yùn)行命令就OK
17、ionic 的滾動(dòng)優(yōu)化
在app.js中的config 塊中,加入
$ionicConfigProvider.scrolling.jsScrolling(false);
默認(rèn)所有的滾動(dòng)使用native,會(huì)比js的滾動(dòng)快很多,并且很平滑,
但這樣做的話(huà),無(wú)法使用一些效果,如has-bouncing="true"(仿蘋(píng)果的一種上下拉顯示背景的彈性效果)
那你可以在特定的view中,ion-content中加入overflow-scroll="false",則該view保持js滾動(dòng)
18、微信支付
支付寶支付非常簡(jiǎn)單,文檔也很豐富,微信的相對(duì)來(lái)說(shuō)低了不止一個(gè)檔次,當(dāng)然最郁悶的一件事是
經(jīng)過(guò)了數(shù)天的查錯(cuò),發(fā)現(xiàn)微信的totalfee 居然是以分為單位,換句話(huà)來(lái)說(shuō),你傳價(jià)格時(shí),只會(huì)有整數(shù)
如果出現(xiàn)0.01,那必然出錯(cuò)。
19 ion-header-bar 下總是有條橫線,即使設(shè)為border:none也沒(méi)有作用。經(jīng)查,添加background-size: 100% 0px; 即可解決。
20 極光推送設(shè)置分組
服務(wù)器端網(wǎng)上代碼很多,不多說(shuō)了,客戶(hù)端中有個(gè)坑
<wbr>window.plugins.jPushPlugin.setTagsWithAlias(tagname,alias);
其中tagname/alias都為string , (看網(wǎng)上好多人這么搞的,不明白他們?cè)趺闯晒Φ???br>
返回錯(cuò)誤Error reading tagAlias JSON
再試
window.plugins.jPushPlugin.setTagsWithAlias([tagname],alias);
這樣OK。 換句話(huà)說(shuō), tags是數(shù)組, alias是string
21 <wbr> ionicLoading 以及網(wǎng)絡(luò)超時(shí)設(shè)置
app.js中,先注冊(cè)rootScope的廣播
.run(function ($ionicPlatform,$ionicLoading,ToastService, $rootScope) {
<wbr> <wbr> <wbr> $rootScope.$on('loading:show', function () {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $ionicLoading.show({ template: '努力為您加載中...' })
<wbr> <wbr> <wbr> })
<wbr> <wbr> <wbr> $rootScope.$on('loading:hide', function () {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $ionicLoading.hide()
<wbr> <wbr> <wbr> })
.config(function ($httpProvider) {
$httpProvider.defaults.timeout = 5000; //默認(rèn)超時(shí)為5秒
$httpProvider.interceptors.push(function ($rootScope) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> request: function (config) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $rootScope.$broadcast('loading:show')
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return config
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> },
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> response: function (response) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $rootScope.$broadcast('loading:hide')
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return response
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> },
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> responseError: function (response) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $rootScope.$broadcast('loading:hide')
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return response
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> },
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> requestError: function (config) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $rootScope.$broadcast('loading:hide')
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> return config
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }
<wbr> <wbr> <wbr> })
如果以上不能解決網(wǎng)絡(luò)超時(shí)問(wèn)題,loading仍然會(huì)幾十秒后才消失,
那就在service.js中
<wbr>QueryAllByKeywords: function (params) {
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> var deferred = $q.defer();
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> //var url = ConfigService.getApi() + "queryAllByParams.php";
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $http({
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> method: 'GET',
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> url: url
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> , params: params,
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> timeout:5000
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> }).success( <wbr> ....
中顯式設(shè)置,這種就只能每個(gè)方法去設(shè)置了。
22、 ionic升級(jí)到1.3后,button-clear 按鈕不正常顯示
如:《button class="button button-clear button-large icon ion-ios-search light"》《/button》
原本顯示是白色搜索按鈕,但現(xiàn)在不顯示,在電腦端發(fā)現(xiàn)鼠標(biāo)移動(dòng)上時(shí)會(huì)顯示。
因使用了ionic-material庫(kù),估計(jì)是該庫(kù)原因
應(yīng)急解決辦法《button class="button button-clear button-large icon ion-ios-search light" style="color:#fff"》 為字體加個(gè)白色即可。
23、ion-scroll 不滾動(dòng)
原代碼 在ionic1.2.4下正常,更新至1.3 無(wú)法滾動(dòng)
《ion-scroll <wbr> id="photoscroll" <wbr> <wbr> delegate-handle="phoeoradio" direction="x" zooming="false" 》
增加overflow-scroll="false" 即可。
24、splash screen 在安卓上變形
發(fā)現(xiàn)在部分1080P下,按cordova splash screen 的 <wbr> screen-xhdpi-portrait.png(720*960) 設(shè)置的啟動(dòng)畫(huà)面,會(huì)變形擠瘦,需要在config.xml 中加入
《preference name="SplashMaintainAspectRati<wbr>o" value="true" /》
不強(qiáng)制拉伸即可。