2015-07-10 47 views
0

我进入了一个现有的JS项目,唯一的程序员已经为它工作了6个月,没有多少解释。 无论如何,它是用Ionic编写的,从我阅读和测试的内容来看,它只是一个用于构建cordova +角度应用程序的工具。 无论如何,我已经将应用部署在我的手机上,Cordova命令行甚至可以获得带有Ionic服务器的服务器,这是其他节点服务器非常熟悉的服务器。 我的问题正在发展。我习惯使应用程序在我的电脑上运行,使用开发工具检查内容,查看访问资源的时间和地点等。该应用程序在我的手机上完全正常工作,但当到达电脑时,我无法通过登录屏幕,出现错误“cordova is not defined”。检查代码更多的依赖于cordova。我能做些什么来解决这个问题? 这里是从项目的样本代码,我在登录碰上错误:迷失在现有的JS项目中

var dir = window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir) { 
dir.getDirectory("build/", {create:true}, function(aDir) { 
    FS.builds = aDir; 
}, FS.fsError); 
dir.getDirectory("assets/", {create:true}, function(aDir) { 
    FS.assets = aDir; 
    App.assetURL = FS.assets.toURL(); 
    document.dispatchEvent(new CustomEvent("FS-ready", {})); 
}, FS.fsError); 
}, FS.fsError); 

预先感谢

+0

科尔多瓦添加的浏览器平台很久以前,尝试将浏览器平台添加到您的项目,然后它可能工作(添加浏览器平台使用“cordova平台添加浏览器”) – jcesarmobile

回答

1

移动应用如MVC (模型 - 视图 - 控制器)包含两个部分:

  • 本机代码(的Android - 爪哇/的OBJ-C /夫特 - 的iOS) - 模型
  • 离子(GUI)+角+科尔多瓦 - 视图+控制器

通过Cordova界面GUI可以与本地部分交谈。

当您尝试在浏览器(apache或类似)中以根用户身份运行www时,它会告诉您cordova未定义,因为浏览器没有cordova源(存储在移动资产中)。

当Cordova准备好时,您的应用程序将在移动设备上启动,但不会在浏览器中发生。

由于您使用的是Angular,因此无论如何在浏览器(Chrome ...)中运行您的项目,控制器会先与服务进行交谈。创建一个文件夹datajson文件,模拟原生移动到Angular的响应,而不是调用cordova API,调用$http.get您的json文件。

$ionicPlatform.ready(function() { 
    if (ionic.Platform.isAndroid()) { 
    $rootScope.imAndroid = true; 
    } 
    else if (ionic.Platform.isIOS()) { 
    $rootScope.imiOS = true; 
    } 
    else{ 
     $rootScope.imBrowser = true; 
    } 
} 
在一些服务

// load JSON data by async way with promise 
app.factory('Items', ['$http', 
    function($http) { 

     return { 
      getJson: function(url) { 
       var ItemsJson = $http.get(url).then(function(response) { 
        return response.data; 
       }); 
       return ItemsJson; 
      } 
     } 
    } 
]); 

所以实例是这样的:

self.login = function(){ 

     if ($rootScope.imBrowser === true) { 
      // in Browser we call JSON file 
      return Items.getJson('data/loginResponse.json'); 
     } 

     if ((ionic.Platform.isAndroid() || ionic.Platform.isIOS())) { 
       // on mobile we call Cordova 
       return CordovaService.login();    
     } 
    }; 
+0

这是我需要编写的许多代码,以使我的浏览器兼容太..如我所说,代码是严重依赖cordov一个 –

+0

好吧,没有其他的替代方法(或者我不知道一个),并且你需要在每个cordova情况下只写'if'情况,大部分工作是生成具有虚构数据的JSON文件 –

+0

嗨,大家好。 我实际上在科尔多瓦的论坛上找到了答案,并想回到这里和分享。 对于android开发(也可用于带safari的ios),您可以使用chrome开发工具来检查移动设备上的网页,即使它是在像cordova这样的webview中。 阅读更多关于Chrome浏览器的远程dubugging(chrome:// inspect /#devices) –