3

我正在 WebStorm 6.0.2 中开发一个基于 Cordova 2.9.0 和 JQuery 2.0.3 的移动应用程序 - 全部在 OSX 上。生成的应用程序正在 Ripple 中进行测试。

我的问题:例如,如果我向控制台发送一些东西

console.log('TEST');

然后我在日志中收到错误:缺少 exec:Logger.logLevel。更糟糕的是,这个错误会在 Ripple 中显示一个弹出窗口('Logger.logLevel - 我们似乎遗漏了一些东西'),这使得调试非常困难。

如果我使用与早期版本的 Cordova (2.5.0) 完全相同的项目,则不会出现同样的错误。因此,问题似乎是 Cordova 特有的,并且没有使用其他任何软件。

我用谷歌搜索了一个解决方案,但奇怪的是,似乎没有其他人有这个问题......

编辑 1:
1 - 如果我在 iOS 模拟器中运行项目,则不会出现错误。所以问题是特定于 Ripple 的!
2 - Phonegap zip 包含每个平台的特定 cordova.js 文件。使用 cli 创建新的 xcode 项目,默认使用 iOS 版本。如果我使用包含的 OSX 版本,则错误不会出现在 Ripple 中。但是(可以理解)不可能将 OSX 版本的 cordova.js 用于 iOS 模拟器。这会导致错过科尔多瓦桥的错误。

编辑 2:
3 - 找到原因:var UseLogger 在 Cordova 2.6 中为假,在 2.9 中设置为真。
4 - 可能的解决方案:编辑 Cordova.js(但不要太喜欢!)并再次将 var UseLogger 设置为 false。

在导致 Ripple 错误的代码下方(对不起,格式化,但 stackoverflow 使得输入 html 代码变得非常困难)。也在显示错误的日志下方。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no" />
    <meta name="viewport" content="user-scalable=no, initial-scale=1, 
    maximum-scale=1, minimum-scale=1, width=device-width, height=device-height,
    target-densitydpi=device-dpi" />
    <script type="text/javascript" src="js/jquery-2.0.3.js"></script>
    <script type="text/javascript" src="js/jquery.mobile-1.3.1.js"></script>
    <script type="text/javascript" src="js/cordova-2.9.0.js"></script>
    <link rel="stylesheet" href="css/jquery.mobile-1.3.1.min.css" />
    <script type="text/javascript">
    document.addEventListener("deviceready", onDeviceReady, false);
    function onDeviceReady() {
    }
    </script>
    <title><!-- not used in visual app --></title>
</head>
    <body>
    <div data-role="page" id="pageIndex">
        <div data-theme="a" data-role="header" data-position="fixed">
            <h3>
            </h3>
        </div>
        <div data-role="content">
            <a data-role="button" onclick="console.log('TEST');" href="#">
                Console test
            </a>
        </div>
        <div data-role="footer" class="ui-bar" data-position="fixed">
            <a data-role="button" href="#" data-icon="info">Info</a>
            <a data-role="button" href="#" data-icon="gear">Options</a>
        </div>
    </div>
    </body>
</html>
Viewport target-densitydpi is not supported.  index.html:6
Failed to load resource: the server responded with a status of 404 (Not Found)    http://localhost:63342/Keep/cordova_plugins.json:0
Failed to load resource: the server responded with a status of 404 (Not Found)    http://localhost:63342/!gap_exec?1373900241256:0
Ripple :: Environment Warming Up (Tea. Earl Gray. Hot.)   js/cordova-2.9.0.js:5638
cordova :: Initialization Finished (Make it so.)  js/cordova-2.9.0.js:5638
Failed to load resource: the server responded with a status of 404 (Not Found)    http://localhost:63342/Keep/icon.png:0
Viewport target-densitydpi is not supported.  index.html:6
Failed to load resource: the server responded with a status of 404 (Not Found)    http://localhost:63342/Keep/cordova_plugins.json:0
Access made to deprecated symbol: navigator.network.connection. null  js/cordova-2.9.0.js:5638

// if the button is clicked, the log below is the result

missing exec:Logger.logLevel  js/cordova-2.9.0.js:5638
LOG,TEST  js/cordova-2.9.0.js:5638
TypeError: Cannot call method 'logLevel' of undefined js/cordova-2.9.0.js:5638
TypeError: Cannot call method 'logLevel' of undefined
    at module.exports.exec
    at Object.logger.logLevel (http://localhost:63342/Keep/js/cordova-2.9.0.js:5626:9)
    at logWithArgs (http://localhost:63342/Keep/js/cordova-2.9.0.js:5598:21)
    at Object.logger.log (http://localhost:63342/Keep/js/cordova-2.9.0.js:5561:36)
    at HTMLAnchorElement.onclick (http://localhost:63342/Keep/index.html:29:164)  js/cordova-2.9.0.js:5638
Logger    js/cordova-2.9.0.js:5638
logLevel  js/cordova-2.9.0.js:5638
TEST  js/cordova-2.9.0.js:5638
deviceready has not fired after 5 seconds.    js/cordova-2.9.0.js:5638
Channel not fired: onCordovaConnectionReady   js/cordova-2.9.0.js:5638
Channel not fired: onCordovaInfoReady js/cordova-2.9.0.js:5638
4

2 回答 2

0

我还发现将 Ripple 设备更改为 Android 设备(如 Nexus S)会删除“missing exec:Logger.logLevel”错误垃圾邮件。

于 2014-08-30T13:03:18.940 回答
0

我在使用波纹进行调试时遇到了同样的问题。我的解决方案是在使用ripple时为osx加载cordova.js,在iOS模拟器中运行时为ios加载cordova.js(无需更改xcode项目)。这种解决方法仍然需要在我的配置文件中进行手动编辑(使用 requirejs)——但它似乎比编辑 cordova.js 文件本身更可取。

于 2013-07-17T21:19:36.943 回答