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
文檔上來看,需要在controller中調用 <wbr> $ionicNavBarDelegate 例如 .controller('DashCtrl', function ($scope, $ionicNavBarDelegate) { <wbr> <wbr> <wbr> $ionicNavBarDelegate.showBar(false); }) 但沒起作用炮捧。最后在模板中使用標簽方法 <a name="baidusnap4" style="text-decoration: underline; color: rgb(118, 95, 71);"></a>
hide-nav-bar = "true"
該方法起作用。
3、 ng-model 與 input 值的問題
例如 <wbr> <wbr> input type="text" ng-model="querystr"
ng-model綁定到$scope.querystr 時,model會根據(jù) text輸入自動變化祥诽,但在controller中將
$scope.querystr=''時 ,text input的值不會產生變化瓮恭。
并且在使用ng-model時雄坪,無法使用
angular.element(document).find(selector).val("some value");方式進行賦值。
解決方法是在controller 中屯蹦,設置一個結構维哈,如
$scope.queryMode ={querystr:''};
在input 中綁定 <wbr> ng-model = "queryModel.querystr"
則controller中重設 <wbr> <wbr> $scope.queryMode.querystr = '';
綁定生效,input 清空登澜。
4阔挠、cordova插件 ,在ripple中彈出錯誤窗口
如果安裝cordova插件,如keyboard,statusbar 等脑蠕, 會在ripple中拋各種錯购撼,并且每次加載會彈出窗口,讓你寫JSON回調空郊, 這個是ripple的BUG份招,不支持自定義插件切揭, 去掉彈窗的辦法是在app.js上方狞甚,即定義angular.module()的上方
寫
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 去掉,新浪自動添加的廓旬。
if (annoyingDialog) annoyingDialog.outerHTML = "";
彈窗將不再出現(xiàn)哼审,但輸出窗口中的ripple.js中的錯誤仍會谐腰,你可以過濾,也可以不管涩盾。
5十气、使用極光推送,按照github上的說明文檔春霍,加入插件后總是無法編譯砸西,查看
是由于 platform/android/AndroidManifest.xml <wbr>中
meta-data android:name=JPUSH_APPKEY android:value=aaabbbbmn9QITAv0Oe
重復,每次build總會生成兩條鍵值
經(jīng)查在plug/android.json 中址儒,有兩條重復生成的語句芹枷,刪掉一個,即可莲趣。
6鸳慈、ionic關于IFAME的調用
因為使用第三方接口,會造成跑到應用外的地址喧伞,ionic無法控制外部連接回到應用走芋,因此一般使用iframe方式
打開外部連接,并加一個headbar用來返回到應用潘鲫,如在modal中打開外部地址
如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> };
但這樣的問題是在于翁逞,頁面完成后,你必須通過手動點擊返回溉仑,并且無法進行數(shù)據(jù)的傳遞熄攘,這個在html5中其實已經(jīng)有了非常完美的解決方法就是postMessage()
在遠端的被iframe的頁面中,加入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,相當于傳遞參數(shù)回來彼念。
<wbr> <wbr> <wbr> <wbr> <wbr> <wbr> <wbr> $scope.modal.hide();
<wbr> <wbr> <wbr> }, false);
<wbr> 你會發(fā)現(xiàn)挪圾,你即接收到了data,同時又關閉了該modal 逐沙,而不需要手動關閉哲思。
當然,你可以將 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> };
最終可以這樣寫
<wbr>var handel = function (e) {
<wbr> <wbr> <wbr> <wbr> var data = e.data;
<wbr> <wbr> <wbr> <wbr> if (data.id > 0) { <wbr>// 傳回來的為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 運行cordova項目
直接使用platfrom目錄里的gradle 可以在android studio中直接導入 cordova的項目棚赔,但運行模擬器時出現(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中徘郭,點擊 <wbr>tools <wbr>->Android->sync <wbr>project <wbr>with <wbr>gradles <wbr>files.
9靠益、加載遠程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';"》
直接加根域名即可,另外不要帶引號 js <wbr> 需要添加在 script-src 中残揉。
10 胧后、 ionic 中 彈出鍵盤遮擋住輸入框
在config.xml 中修改全屏為FALSE并添加 <wbr> adjustPan <wbr> (adjstResize沒有成功)
<wbr>《preference name="Fullscreen" value="False" /》
<wbr> 《preference name="android-windowSoftInputMode" value="adjustPan"/》
11、ionic監(jiān)聽滾動
網(wǎng)上的示例xxx.bind('scroll',function(){.....}),很容易將頁面跑死抱环, 換個思路壳快,使用監(jiān)聽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> }
})
當觸摸結束時井濒,判斷當前的位移锌半,來做一些操作。這樣在性能上提高了許多。
$ionicScrollDelegate.$getByHandle 操作的是在html中定義的delegate-handle
如《ion-content id="scdiv" delegate-handle="homescroll"》
12鲫懒、 APP開啟檢測網(wǎng)絡并提示開啟
需要三個插件
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> '您的設備未開啟網(wǎng)絡',
<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> ['開啟', '取消'] <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中可設置以下本地設置
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");
其中相關網(wǎng)絡的為wifi <wbr> 移動數(shù)據(jù)開啟未找到七婴。誰試出了是哪個請告訴我
13宏胯、$sate.go <wbr> 和 $stateParams 傳參及收參
在 controller1 中使用 <wbr> $state.go('statename',{id:1}) ;傳遞參數(shù)
在 statename 相對應的 <wbr> controller2 中接收參數(shù)
$scope.id = $stateParams.id;
注意,此處必須在router.js 中設置 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 }, 對應$state傳的參本姥,若不設肩袍,則必為undefined
14、關于ionic中想底部加一長按鈕婚惫,隨頁面滾動位置不變氛赐,例如
最初的方案是在 ion-content <wbr> 外 ion-view 內添加一層
div .....style= ..... position:fixed <wbr> <wbr> <wbr> bottom:0px;之類,但最終發(fā)現(xiàn)先舷,在不同分辨率下位置并不正確
基本可確定是因為statusbar等的緣故艰管,仔細看了下ionic.css最終發(fā)現(xiàn),太簡單了
div class="tabs" <wbr> 就可以了蒋川。
15牲芋、php中取值問題
ionic中用的$http <wbr> method:post ,params........在PHP中用$_POST取不到值捺球, 改成 $_Request 就行了缸浦。
16、使用vs2015 release
會提示使用發(fā)布配置進行調試時氮兵,Android 程序包必須已簽名裂逐。要配置 Android 簽名,請按照 http://go.microsoft.com/fwlink/?LinkID=613579 中的說明操作(該網(wǎ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 請百度泣栈,只要有jdk 運行命令就OK
17卜高、ionic 的滾動優(yōu)化
在app.js中的config 塊中,加入
$ionicConfigProvider.scrolling.jsScrolling(false);
默認所有的滾動使用native南片,會比js的滾動快很多掺涛,并且很平滑,
但這樣做的話疼进,無法使用一些效果薪缆,如has-bouncing="true"(仿蘋果的一種上下拉顯示背景的彈性效果)
那你可以在特定的view中,ion-content中加入overflow-scroll="false"颠悬,則該view保持js滾動
18矮燎、微信支付
支付寶支付非常簡單定血,文檔也很豐富赔癌,微信的相對來說低了不止一個檔次诞外,當然最郁悶的一件事是
經(jīng)過了數(shù)天的查錯,發(fā)現(xiàn)微信的totalfee 居然是以分為單位灾票,換句話來說峡谊,你傳價格時,只會有整數(shù)
如果出現(xiàn)0.01刊苍,那必然出錯既们。
19 ion-header-bar 下總是有條橫線,即使設為border:none也沒有作用正什。經(jīng)查啥纸,添加background-size: 100% 0px; 即可解決。
20 極光推送設置分組
服務器端網(wǎng)上代碼很多婴氮,不多說了斯棒,客戶端中有個坑
<wbr>window.plugins.jPushPlugin.setTagsWithAlias(tagname,alias);
其中tagname/alias都為string , (看網(wǎng)上好多人這么搞的,不明白他們怎么成功的主经?)
返回錯誤Error reading tagAlias JSON
再試
window.plugins.jPushPlugin.setTagsWithAlias([tagname],alias);
這樣OK荣暮。 換句話說, tags是數(shù)組罩驻, alias是string
21 <wbr> ionicLoading 以及網(wǎng)絡超時設置
app.js中穗酥,先注冊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; //默認超時為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)絡超時問題,loading仍然會幾十秒后才消失惠遏,
那就在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> ....
中顯式設置砾跃,這種就只能每個方法去設置了。
22节吮、 ionic升級到1.3后,button-clear 按鈕不正常顯示
如:《button class="button button-clear button-large icon ion-ios-search light"》《/button》
原本顯示是白色搜索按鈕蜓席,但現(xiàn)在不顯示,在電腦端發(fā)現(xiàn)鼠標移動上時會顯示课锌。
因使用了ionic-material庫厨内,估計是該庫原因
應急解決辦法《button class="button button-clear button-large icon ion-ios-search light" style="color:#fff"》 為字體加個白色即可。
23渺贤、ion-scroll 不滾動
原代碼 在ionic1.2.4下正常雏胃,更新至1.3 無法滾動
《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) 設置的啟動畫面,會變形擠瘦固棚,需要在config.xml 中加入
《preference name="SplashMaintainAspectRati<wbr>o" value="true" /》
不強制拉伸即可统翩。