当我的应用程序在手机上本地存储数据时,该存储有多长久?我会详细说明具体情况:
我正在使用jQueryMobile和Phonegap构建一个应用程序.它本质上是一个浏览器应用程序,但使用Phonegap让我打包并在应用程序商店中出售,以及其他优点.
Phonegap提供两种存储方式,这两种方式都可以协调iO,Android,Blackberry和其他一些操作系统的本机功能:localStorage(原始键值对)和Web SQL数据库.localStorage和Web SQL都是属于浏览器的存储形式.话虽如此,我无法确定数据将保存多长时间,在什么情况下会被删除,在什么情况下可能无法使用等等.
例如,如果应用程序使用localStorage或Web SQL存储数据,并且用户在其Android上切换到不同的标准浏览器,那么是否可以使用新浏览器打开应用程序,这是否意味着存储的数据不可用?
如果用户一年没有使用该应用程序(在我的情况下是一个现实的,不一定是坏的情况),数据是否会像cookie一样过期,或者可能被大量的数据库推出浏览器的存储空间来自其他应用的数据?
或者甚至更早地销毁数据,例如: - 用户访问浏览器中的另一个站点 - 手动关闭浏览器 - 浏览器进程被终止或死亡 - 等等
或者localStorage和web SQL是您在(在Android中)转到设置>应用程序并主动删除与应用程序关联的用户数据时仅删除的存储类型?
感谢您的任何见解.在'WWW'上没有任何信息.
在应用更新的情况下会发生什么.本地和网络存储将被删除或将保留?
对于错误报告,我想在我拥有的每个函数的代码周围插入一个try-catch包装器.
所以基本上我想替换
function foo(arg){
bar();
}
Run Code Online (Sandbox Code Playgroud)
...与...
function foo(arg){
try {
bar()
}
catch(e){
customErrorHandler(e)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将这个通用的try-catch事物应用于所有函数而无需手动编辑所有函数?例如,通过修改Function对象的原型?
编辑
为什么我要尝试捕获我的所有功能:我正在构建一个我在iOS和Android上发布的HTML5应用程序.我可以从我目前的基本javascript错误报告中看出,即使应用程序在我自己的设备上运行良好,其他一些设备上也会出现错误.
我的目标是双重的:每当某人的设备上发生javascript错误时......
我发布了两份关于Mechanical Turk的调查,我没有要求我的工人提供任何联系信息.甚至可能不允许这样做:无论如何现在已经太晚了.
现在我想向完成任务的所有人发送电子邮件或其他类型的消息
在此页面上:http://www.itworld.com/internet/76659/experimenting-mechanical-turk-5-how-tos它表示您可以通过单击已完成任务列表中的工作者ID来发送电子邮件.但是,当我查看我的MTurk帐户时,情况并非如此.
在Manage> Workers下,我可以单击一个worker ID,然后获得该worker的一些详细信息,以及奖励或阻止它们的选项.但不要发送任何消息.
此功能已被删除吗?我是否需要学习使用糟糕的命令行工具?
当用户安装Android应用时,会在应用菜单中创建启动器图标.我与之交谈的许多用户都希望在安装应用时,主屏幕上会自动出现一个图标("启动板").
许多应用程序以某种方式实现了这一点.我的偏好是在安装时出现一个窗口,询问用户"你想添加一个快捷方式吗?" 如果这不可能,任何自动添加快捷方式的代码都可以.
Android在这里给出了一堆代码:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LauncherShortcuts.html 暗示添加此代码(及相关内容) xml)到你的项目就可以了.但它没有我想要的效果.似乎所提供的代码是被动的,我需要以某种方式触发它.
所以我的问题是:
如何触发快捷方式的安装,如何确保只发生一次,最好是由某种"app install"事件触发?
PS:一个复杂的因素是我正在使用PhoneGap构建我的应用程序,这意味着主要活动不是"活动"而是"DroidGap".
我有一个Phonegap应用程序,我正在开发和测试Android.问题是,当我发布到设备时,Android Manifest充满了我没有要求的权限请求.
我已经发现Phonegap插件(请参阅"添加功能"下的此文档页面)与它有关.如果您安装了像Camera这样的插件,那么PhoneGap会自动将相关权限添加到AndroidManifest.所以我已经卸载了我不需要的所有Phonegap插件,这些权限就消失了.
到现在为止还挺好.
麻烦的是,我的Android Manifest(以及项目的/ Plugins目录中名为"android.json"的文件)仍然包含许多不需要的功能:
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)
由于我的应用程序是关于预算,"录制视频"许可将向任何理智的用户建议这是一个邪恶的偷偷摸摸的应用程序试图破坏他们的隐私.
如何摆脱这些功能请求?我已经试过......
<preference name="permissions" value="none" />到config.xml.当然,我可以在发布最终版本之前从AndroidManifest.xml中手动删除这些内容.但我想要一个更结构化的解决方案,因为我使用"cordova run android"来测试设备,这会覆盖对AndroidManifest.xml和android.json的所有更改.
我有一个Phonegap和jQuery Mobile应用程序,可以很好地在Android和Web上运行.在iOS上我得到了意想不到的结果,这似乎是由于我绑定大多数应用程序进程的处理程序的document.pageinit事件被触发了两次.
不,我没有绑两次.不,我没有使用document.ready.是的,我确实将它绑定到文档,在脚本的早期,而不是在任何其他函数内.
$(document).on('pageinit',function(event){
alert(' Pageinit on document');
//Some more code
})
Run Code Online (Sandbox Code Playgroud)
第一次发射时,闪屏仍在显示.此时,在使用XCode在MacBook Pro上进行测试时,控制台甚至无法使用:当我使用console.log时,上面的消息没有显示在控制台中.
第二次,jQueryMobile创建第一页后不久就发生了火灾.
造成这种双重射击的原因是什么?我该怎么做?
编辑:我后来注意到,pageinit不仅仅是第二次触发,而是每次我打开一个新的data-role ='page'div.请参阅下面的答案.
我正在使用jQuery通过他们的IP地址获取访问者的位置.这个名为freeGeoIP的服务很棒.我需要做的就是在URL末尾添加'json'或'xml',然后添加IP地址,它将返回所需的数据.
当我在浏览器中手动执行此操作时,它可以正常工作:我需要下载一个小文档.当我从浏览器执行$ .ajax或$ .getJSON请求时,它会回答"200 OK"标题和下面的元数据.但是没有实际数据进来.发生了什么?
编辑:我添加了javascript/jQuery代码:
function openForm(event,ui){
var _this = $(this);
//Get details on the user's IP
var myIP = $('#yourIP').attr('ip');alert(myIP);
var url = 'http://freegeoip.appspot.com/json/' + myIP;
$.ajax({
url: url,
dataType: 'json',
contentType: 'text/json',
timeout: 10000,
complete: function(ip){
alert('Success Ajax!');
//URL returns status,ip,countrycode,countryname,regioncode,regionname,city,zipcode,latitude,longitude
$('#yourIP').text(ip.city + ", " + ip.countryname + " at " + ip.latitude + " latitude.");
$('#yourIP').attr({'city': ip.city,'country': ip.countryname});
}
});
RESPONSE HEADERS
Cache-Control no-cache
Content-Type text/json
Expires Fri, 01 Jan 1990 00:00:00 …Run Code Online (Sandbox Code Playgroud) 我在将PhoneGap 1.x应用程序升级到Phonegap 3.0时遇到了很多问题,至少对于Android来说(我还没有开始升级iOS版本).我认为如果我将所有这些内容合并到一个问答环节中,它可能会对很多人有所帮助.
所以问题是:在将现有应用升级到Phonegap 3.0时,您需要注意什么?
这是一个顶级手册,可以深入了解一些细节.我正在为Mac用户描述这个过程,但是虽然命令和工具可能不同,但Windows的原理是相同的.
我有一个我在Android上测试的Phonegap/Cordova 3.0应用程序.
从版本2.x开始,Cordova在很大程度上依赖于命令行终端.我已经完成了所有设置工作,我可以构建应用程序.但有两件事令我不安.
首先,Android项目有两个www文件夹.一个是[myproject]/www.另一个是[myproject]/platforms/android/assets/www.当我修复bug时,我不确定要编辑哪些文件夹.
如果我是正确的,第一个是放置应用程序文件的位置,然后使用命令行"cordova build"创建应用程序.第二个应该只是在部署之前构建之后使用的副本.
现在我的问题是,当我对我的应用程序进行更改并且我想在设备上进行测试时,是否每次都必须使用命令行来(重新)构建应用程序?
所以我问了并回答了问题[如何在没有Phonegap Build的情况下进行Phonegap 3.0] [1].现在我的应用程序已经为iOS做好了准备(我认为),现在是时候开始为该平台进行部署和调试了.
正式问题:如何将iOS平台添加到Phonegap 3.0项目中?
我有一个用Phonegap和jQueryMobile构建的HTML5应用程序,我正在为Android测试它.我想要包含Google Analytics,但我采取的每种方法都会遇到障碍.
这个解决方案(Guillaume Gendre的回答)让我很兴奋:只需要包含一个JS文件,在html中初始化Analytics,我就已经完成了.它看起来非常有前景.它适用于浏览器.但不是我的Nexus S运行Android 4.1.2.
我把这个脚本放在文档头的末尾:
<script type="text/javascript" src="GALocalStorage.js"></script>
<script>
ga_storage._setAccount('UA-XXXXXXXX-1');
ga_storage._trackPageview('/index.html');
ga_storage._trackEvent('Startup','Starting scripts all loaded')
</script>
Run Code Online (Sandbox Code Playgroud)
在app启动期间的早期,我得到了这些令人鼓舞的调试标志:
09-05 21:47:49.558: V/GAV3(22963): Thread[GAThread,5,main]: connecting to Analytics service
09-05 21:47:49.609: V/GAV3(22963): Thread[GAThread,5,main]: connect: bindService returned true for Intent { act=com.google.android.gms.analytics.service.START (has extras) }
09-05 21:47:49.656: V/GAV3(22963): Thread[GAThread,5,main]: Loaded clientId
...
09-05 21:47:49.660: I/GAV3(22963): Thread[GAThread,5,main]: No campaign data found.
09-05 21:47:49.664: V/GAV3(22963): Thread[GAThread,5,main]: putHit called
Run Code Online (Sandbox Code Playgroud)
不久之后出现了一些"Unknown Chromium error:0".当我将GALocalStorage设置为调试模式时,我发现这几乎总是紧跟在"跟踪事件"之后.
然后,很久以后,这些线出现了:
09-05 21:47:52.558: V/GAV3(22963): Thread[Failed Connect,5,main]: falling back to local store
09-05 21:47:52.609: …Run Code Online (Sandbox Code Playgroud)