cordova + ionic 使用中碰到的一些問題--非原創(chuàng)

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" /》
不強制拉伸即可统翩。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末仙蚜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厂汗,更是在濱河造成了極大的恐慌委粉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件娶桦,死亡現(xiàn)場離奇詭異贾节,居然都是意外死亡,警方通過查閱死者的電腦和手機衷畦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門栗涂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祈争,你說我怎么就攤上這事斤程。” “怎么了菩混?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵忿墅,是天一觀的道長。 經(jīng)常有香客問我墨吓,道長球匕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任帖烘,我火速辦了婚禮亮曹,結果婚禮上,老公的妹妹穿的比我還像新娘秘症。我一直安慰自己照卦,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布乡摹。 她就那樣靜靜地躺著役耕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪聪廉。 梳的紋絲不亂的頭發(fā)上瞬痘,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音板熊,去河邊找鬼框全。 笑死,一個胖子當著我的面吹牛干签,可吹牛的內容都是我干的津辩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喘沿!你這毒婦竟也來了闸度?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蚜印,失蹤者是張志新(化名)和其女友劉穎莺禁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晒哄,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡睁宰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年肪获,在試婚紗的時候發(fā)現(xiàn)自己被綠了寝凌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡孝赫,死狀恐怖较木,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情青柄,我是刑警寧澤伐债,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站致开,受9級特大地震影響峰锁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜双戳,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一虹蒋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧飒货,春花似錦魄衅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扣墩,卻和暖如春哲银,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呻惕。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工荆责, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蟆融。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓草巡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子山憨,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容