0

我使用 FlashDevelop(Flash Builder 的免费替代品),它使用 Adob​​e 的(最新)开源 Flex 框架。

我也想为 Android 和 iOS 开发一个应用程序。在某些部分,我使用 StageWebView 来显示我不想重写为 flex AS3 代码的内容。

简而言之:我处于开发的早期阶段,这是我的第一个 flex 移动应用程序。在某些部分,它使用 HTML5 功能“localStore”(javascript 中对象窗口的一部分)来存储一些数据。但是好像flex的webkit浏览器没有这个功能?我还想知道这是否是典型的 flex 问题,还是在部署应用程序时也存在?在移动设备上加载 HTML 部分时不会出现此问题(例如在移动 Safari 中)。

此外,当 localStorage 功能不可用时,它会切换回 cookie。但这也无法正常工作。在所有其他浏览器中都没有问题,即使在 IE 中也是如此。饼干的结果: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;
    };

我在这里问它,因为我没有在网上找到答案。也许有人给我一个线索来解决这个问题的正确方向?

4

3 回答 3

1

但是好像这个功能在flex的webkit浏览器中是没有的

Flex 框架中没有 webkit 浏览器。Desktop AIR 运行时中包含一个 Webkit 版本;但这对于移动应用程序来说并不重要。

Mobile AIR 为 StageWebView 使用操作系统(Android 或 iOS)的下划线浏览器引擎。我不确定具体情况;也没有通过“应用程序中的浏览器”公开哪些功能,但这里引用文档来确认这一点:

在移动和扩展移动配置文件中的设备上,StageWebView 类使用设备操作系统提供的系统 Web 控件。因此,可用功能和渲染外观可能因设备而异。

因此,我推测您的问题与 Flex 或 AIR 无关,而是与您正在测试的操作系统中浏览器的支持有关。

于 2012-05-04T04:00:58.153 回答
0

这些可能对您有所帮助: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/
(也可以查看上一篇文章。链接在第一段。)

希望最后两个中的一个可以帮助解决问题/给您解决方法。

托德

于 2012-05-14T09:28:53.937 回答
0

显然 Air 的 stageWebView 不支持localStorage。尽管它不是一个完美的解决方案,但在花了几个月的时间寻找解决方案之后,我用sessionStorage替换了 localStorage ,并且能够正确加载我的文件。

请记住,sessionStorage 仅适用于 stageWebView 的 loadURL 方法,loadString 没有 localStorage 和 sessionStorage。

编辑: sessionStorage 似乎只在 android 中工作。我不能:localStorage 和 sessionStorage 在 Adob​​e Air for iOs 中工作。

编辑 2:显然,Adobe Air 的 2 月更新允许在 Android 的 Adob​​e Air 上使用 localStorage。(还没有测试过)

于 2017-01-18T13:56:35.413 回答