我使用FlashDevelop(Flash Builder的免费替代品),它使用Adobe的(最新)开源Flex框架。
我也想开发一个Android和iOS的应用程序。在某些部分,我使用StageWebView来显示我不想重写为Flex AS3代码的内容。
简单地说:我正处于开发的早期阶段,这是我的第一个Flex移动的应用程序。在某些部分,它使用HTML5功能“localStore”(javascript中对象窗口的一部分)来存储一些数据,但似乎这个功能在flex的webkit浏览器中是不能用的?我还想知道这是典型的flex问题还是在应用程序将被部署时也存在?在移动的设备上加载HTML部件时(例如,在Mobile Safari中),不会出现此问题。
同样,当localStorage功能不可用时,它会切换回cookie。但这也不能正常工作。在所有其他浏览器中没有问题o,即使在IE中。cookie的结果:varname=undefined; expires=Thu, 03 May 2012 01:01:41 GMT.
这到底是怎么回事?
下面是一些Javascript代码:
// Picked up from: https://github.com/carhartl/jquery-cookie
// Usage: http://www.electrictoolbox.com/jquery-cookies/
jQuery.cookie = function (key, value, options) {
// key and at least value given, set cookie...
if (arguments.length > 1 && String(value) !== "[object Object]") {
options = jQuery.extend({}, options);
if (value === null || value === undefined) {
options.expires = -1;
}
if (typeof options.expires === 'number') {
var days = options.expires, t = options.expires = new Date();
t.setDate(t.getDate() + days);
}
value = String(value);
return (document.cookie = [
encodeURIComponent(key), '=',
options.raw ? value : encodeURIComponent(value),
options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE
options.path ? '; path=' + options.path : '',
options.domain ? '; domain=' + options.domain : '',
options.secure ? '; secure' : ''
].join(''));
}
// key and possibly options given, get cookie...
options = value || {};
var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent;
return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null;
};
本地存储:
jQuery.locstore = function(key, val, opt ) {
var ls = window.localStorage,
j = window.JSON,
b = !( !ls || !j );
if( !b )
{ return jQuery.cookie( key, val, opt ); }
// set
if( arguments.length > 1 )
{
var bRem = (val == null ),
v = (bRem || typeof val == 'number' || typeof val == 'string')?val:j.stringify(val);
if( bRem )
{ b = ls.removeItem(key); }
else { b = ls.setItem(key, v); }
return b;
}
// get
var v = ls.getItem(key);
if( v != null && typeof val != 'number' )
try { v=j.parse(v); } catch(e){}
return v;
};
我在这里问这个问题是因为我在网上没有找到答案。也许有人能给予我一个解决这个问题的正确方向的线索?
3条答案
按热度按时间bq9c1y661#
但在flex的webkit浏览器中似乎没有这个功能
Flex Framework中没有Webkit浏览器。Desktop AIR运行时中包含一个版本的Webkit;但这对移动的应用程序来说并不重要。
移动的AIR使用了StageWebView的操作系统(Android或iOS)的下划线浏览器引擎。也不知道通过“应用程序中的浏览器”暴露了什么功能,但这里有一个quote from the docs来确认这一点:
在移动的和扩展移动配置文件中的设备上,StageWebView类使用设备操作系统提供的系统Web控件。因此,可用功能和呈现外观可能因设备而异。
因此,我推测您的问题与Flex无关,也与AIR无关,而是您正在测试的操作系统中对浏览器的支持。
blpfk2vs2#
这些可能对你有帮助:
http://helpx.adobe.com/air/kb/stagewebview-differences-platforms-air-sdk.html
http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/media/StageWebView.html
http://xperiments.es/blog/en/stagewebviewbridge-comunicacion-entre-actionscript-y-javascript-y-viceversa/
http://coenraets.org/blog/2011/07/using-jquery-in-a-flex-application/
(View前一篇文章也是。链接在第一段。)
希望最后两个中的一个能帮助解决问题/给予你一个变通办法。
托德
mlnl4t2r3#
显然,Air的stageWebView不支持localStorage。尽管它不是一个完美的解决方案,但在花了几个月的时间寻找解决方案后,我用sessionStorage替换了localStorage,并能够正确加载我的文件。
请记住,sessionStorage只适用于stageWebView的loadURL方法,loadString没有localStorage或sessionStorage。
编辑:sessionStorage似乎只能在android中工作。我不能得到:localStorage或sessionStorage都无法在Adobe Air for iOS中使用。
编辑2:显然Adobe Air的二月份更新允许在Android的Adobe Air上使用localStorage。