Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Phonegap DeviceTready事件?_Javascript_Ios_Cordova - Fatal编程技术网

Javascript Phonegap DeviceTready事件?

Javascript Phonegap DeviceTready事件?,javascript,ios,cordova,Javascript,Ios,Cordova,比如,我试图区分在移动浏览器和phonegap WebUI视图中运行的javascript代码。标准的解决方案是等待devicerady事件触发,因为在它触发后,您知道您处于phonegap中。但是你要等多久 我有一些代码希望尽早运行,因为我不希望我的用户坐在那里等待。但我不想在phonegap初始化之前运行它,如果它要初始化的话。我要寻找的是一个类似于DeviceTready的事件,当aftercordova.js代码运行并确定没有可附加的内容时触发。或者一些变量,我可以投票来区分cordov

比如,我试图区分在移动浏览器和phonegap WebUI视图中运行的javascript代码。标准的解决方案是等待
devicerady
事件触发,因为在它触发后,您知道您处于phonegap中。但是你要等多久

我有一些代码希望尽早运行,因为我不希望我的用户坐在那里等待。但我不想在phonegap初始化之前运行它,如果它要初始化的话。我要寻找的是一个类似于
DeviceTready
的事件,当after
cordova.js
代码运行并确定没有可附加的内容时触发。或者一些变量,我可以投票来区分cordova仍在加载和cordova已放弃尝试加载之间的区别。有区别吗

我讨厌这个解决方案,但这是我想到的最好的解决方案。请告诉我还有比这更好的事:

function whenLoaded(callback,timeout) {
    var when_loaded_needs_running = true;
    document.addEventListener('deviceready', function() {
        if( when_loaded_needs_running ) {
            when_loaded_needs_running = false;
            callback();
        } else {
            console.log("deviceready fired too late. whenLoaded already ran.");
        }
    });
    window.setTimeout(function() {
        if( when_loaded_needs_running ) {
            when_loaded_needs_running = false;
            console.log("deviceready didn't fire after "+timeout+"ms. running whenLoaded anyway.");
            callback();
        }
    }, timeout);
}

一个更简单的测试是查看
cordova
JavaScript全局是否可用-无需等待事件,您可以立即执行(只要它在cordova.js的理论
包含之后执行)。根据运行的PhoneGap版本,您可能需要测试几个全局变量之一

应该简单到:

if(cordova || Cordova || PhoneGap) {
  alert('hey im in a phonegap webview!');
} else {
  alert('regular old browser, aw shucks');
}

不。这些变量在加载脚本时设置,无论脚本是否工作。因此,只有当服务器知道是否要包含cordova
script
标记时,这才有效,因为用户代理是相同的,所以这是不可能的。在我看来,不管客户端如何加载脚本文件都是愚蠢的。我想你是在远程加载你所有的资产?i、 e.您的phonegap网络视图从服务器获取index.html、phonegap.js等,就像移动网页视图一样?如果是这样,考虑不要为您的PopeGAP客户端这样做。您的phonegap用户已经在等待资产的到来,因此您的初始解决方案不会比他们已经体验到的延迟更多。Phonegap为您提供了一个“编译”步骤—您在提交到应用商店之前打包应用程序。如果有一种方法可以让服务器生成的HTML页面加载本地资产,请告诉我如何加载,因为我的理解是这是不可能的。至于将与数据库交互并从我的服务器生成页面的所有逻辑移动到客户端javascript,这其实并不简单。你能将HTML也打包到应用程序中吗?假设您的应用程序的部分/所有部分都托管在可访问web的服务器上。当您通过phonegap编译本机应用程序时,请从服务器上拍摄index.html的快照,并向其添加标记。应用程序逻辑(js)和样式(css)可以托管在您的服务器上,但是当您使用phonegap打包时,只需将脚本+样式标记引用从本地(相对)引用更改为绝对()引用。我通常喜欢在一个简单的构建脚本(生成文件、节点等)中捕获这些内容,而不是那么简单。与大多数web一样,HTML是由服务器动态生成的。无法在应用程序中运行服务器代码,因此将所有HTML打包到应用程序中需要从头开始重新编写大部分应用程序。