JavaScript 库在设备上无法工作

8
我正在使用MikeMcl的BigNumber库来处理大数字。我在一个Ionic/Angular项目中使用这个库。
正如在Github上所解释的那样,安装和使用此库的方法是在您的html中包含一个脚本标签:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>

    <!-- compiled css output -->
    <link href="css/ionic.app.min.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">

    <!-- ionic/angularjs js -->
    <script src="lib/ionic/js/ionic.bundle.min.js"></script>

    <!-- cordova script (this will be a 404 during development) -->
    <script src="lib/ngCordova/dist/ng-cordova.min.js"></script>
    <script src="cordova.js"></script>

    <!-- ********* BIGNUMBER library ********* -->
    <script src='lib/bignumber.js/bignumber.min.js'></script>    

    <script src="js/app.js"></script>
    <script src="js/controllers.js"></script>
    <script src="js/services.js"></script>

  </head>
  <body ng-app="starter">
    <ion-nav-view></ion-nav-view>
  </body>
</html>

现在在我的代码中,我可以像这样使用这个库:
x = new BigNumber(123.4567)
y = BigNumber('123456.7e-3')
z = new BigNumber(x)
x.equals(y) && y.equals(z) && x.equals(z)      // true

我测试过了,它在Chrome和Safari上都可以正常工作(甚至在设备上也是如此)。
但是当我使用Phonegap Build将应用程序安装到手机上时,应用程序不再工作(我通过从代码中删除BigNumber语法来检查该库是原因)。此外,应用程序中的Angular会崩溃,并显示例如{{variableName}},没有任何东西能够工作。
由于我在云环境中开发,所以我尝试使用Safari Developer Debug Console在mac上调试应用程序(通过使用USB将我的手机连接到mac,然后在Safari中启用开发人员工具)。
然而,除了一个异常之外,没有发现任何错误:
file not found: "path/to/ionic/lib/js/angular.min.js.map" 404

但是这不是问题的原因

发生了什么?我如何在我的设备上继续使用这个javascript库?


是的,.map文件与此无关。你尝试过单独测试BigNumber库,或者在标准HTML网站上尝试它而不使用Cordova吗?因为我想不出Cordova会与其不兼容的原因。 - Huey
@Huey 感谢您的确认。我已经在这个Ionic应用程序中测试了该库,当在浏览器中测试时(404),它没有cordova.js文件,但只有在部署到设备时才有;因此我们可以说我们确实对其进行了测试。 - WJA
使用 BigNumber 类型替换 y,这样就可以了。 - S. Ali Mihandoost
3个回答

1

我刚刚测试了你的代码,发现它无法正常工作,因为在创建变量 y 时,你没有使用关键字 new。

这是我使用的代码,它可以正常工作。

x = new BigNumber(123.4567)
y = new BigNumber('123456.7e-3')
z = new BigNumber(x)
alert( x.equals(y) && y.equals(z) && x.equals(z));// I get true

是的,我在一台安装有iOS 8.1.3的iPhone 5上进行了测试。 - jcesarmobile

0

找到了解决方案。如果您也遇到了javascript库在设备上无法工作,但在浏览器中可以工作的情况,那么这个答案可能会对您有所帮助。

问题出现在当我运行npm install来安装包时,它没有正确更新我的.git依赖项。发生的情况是每次我通过Github和Phonegap Build打包我的应用程序时,BigNumber文件夹都没有被考虑在内。因此,基本上,文件bignumber.js在应用程序中不可用,这就是为什么它无法工作的原因。

我通过将BigNumber文件夹中的所有文件复制到一个新的自定义文件夹中来解决了这个问题。

相关问题在这里:Git not pushing all files and folders


0

@JohnAndrews,

如果您的代码只有这些,那么它缺少deviceready监听器。在cordova/phonegap上,通常情况下,直到您获得deviceready事件之前,您才不能做任何事情。所以,这是我能想到的唯一解决方法,您可以添加一个function onDeviceReady() {},看看是否可以解决您的问题?

哦,当然,在此事件之后确保您运行您的操作。


我怀疑那是否能解决问题,因为它不是一个 PhoneGap 插件,而是一个独立的 JS 库。我会尝试并回复结果。 - WJA
我怀疑这不会解决你的问题,但试一下也值得。 - user3255670

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接