如何解决Android Phonegap应用程序SyntaxError:解析错误? (空白屏幕问题)

时间:2014-03-21 17:49:34

标签: javascript android cordova dojo

我正在使用 weinre 对在Mac OS X(最新版本)上运行的Android模拟器上执行的应用程序进行远程调试。

上下文(最终必要)

我目前使用的AVD(Android虚拟设备)是:

  • 设备:Nexus 4(4.7",768 x 1280:xhdpi)
  • 目标:Android 2.3.3 - API级别10

    Javascript Framework Dojo, v1.9

实际问题

我尝试从远程控制台初始化方法( weinre ),但是一旦我开始调用它,我得到相应的输出:

第一次方法调用:

SyntaxError: Parse error

第二次方法调用:

TypeError: Result of expression 'lang' [undefined] is not an object.

第3次方法通话:

undefined

从这一点开始,我试图调用的方法总是会提供未定义的输出。

我知道第一个错误是因为我定义了一个数组。即:

var requiredLibraries = ["app/webpage",
            "dojo/_base/window",
            "dojo/dom-construct",
            "dijit/registry",
            "dojo/on",
            "dojox/mobile",
            "dojox/mobile/deviceTheme",
            "dojox/mobile/compat",
            "dojo/domReady!"
        ];

但我根本没有看到任何解析错误。事实上,我已经通过jslint传递了我的代码并且它有效。

我已尝试其他Android设备,其他版本,即版本4.4 ,但徒劳无功。每次我得到相同的结果。

注意:仅适用于Android设备/ Android模拟器。在桌面浏览器或iOS设备/ iOS模拟器上测试应用程序时,我没有遇到任何问题。

任何提示?

1 个答案:

答案 0 :(得分:1)

您首先需要在DOJO常见问题解答中解决这一问题:

  

在使用时,我似乎无法在Android设备上运行Dojo Mobile页面   像PhoneGap这样的图书馆,我做错了什么?

     

Android WebKit浏览器实现中存在一个已知错误   不允许以下划线'_'开头的文件   从本地文件系统加载(例如,在使用Dojo Mobile时)   与PhoneGap结合创建本机应用程序)。绕过这条路   问题是要创建文件的内置版本(您需要这样做   无论如何,这是为了表现。)

常见问题解答:http://dojotoolkit.org/reference-guide/1.9/dojox/mobile/faq.html

确认此问题:

http://developer.appcelerator.com/question/144171/using-dojo-mobile-and-filenames-with-

按照此构建教程创建DOJO应用程序的单个javascript文件构建,该文件将取消以下划线开头的单个javascript文件:

http://dojotoolkit.org/documentation/tutorials/1.9/build/

假设你可以构建DOJO app ok,那么你需要按照这个来与Phonegap / Cordova集成:

https://dojotoolkit.org/documentation/tutorials/1.9/dojox_app/contactsCordova/

* 如果您在使用deviceTheme.js时遇到问题,请在页面中间注意它如何显示您的Phonegap / Cordova index.html文件应该是什么样子:

// Your device Theme
<script src="{path_to_dojox}/dojox/mobile/deviceTheme.js"></script>

// Loads cordova
<script src="cordova.js"></script>

// Loads DOJO
<script src="{path_to_dojo}/dojo/dojo.js" data-dojo-config="app: {debugApp: 1}, async: true"></script>

// DOJO then uses this require statement to load your built DOJO app
<script>
    require(["contactsApp/contacts"]);
</script>

在离线前帮助@nffdiogosilva完成这项工作的原创想法

这主要是一个调试问题,您需要隔离移动部件并逐步验证您的假设。确保没有任何更基本的假设工作实际上没有被破坏。也许是dojo.js库或者dojo app对象的初始实例化?另外,您使用的是其他任何JavaScript库吗?

在我们的另一个帖子中,我提到了我如何使用Weinre来确定我的Sencha app对象不会在Android 2.3上加载。 Sencha库本身似乎加载正常,但是创建我的Sencha应用程序对象的样板调用会挂起一点,然后不加载,我的UI根本没有渲染(白屏!)。我通过做一些增量的console.log跟踪以及评论我的一些不同的javascript包括直到问题变得清晰来解决这个问题。它在Android 4+上运行良好,但在这种情况下可能是一个不同的问题。