0

私は、Adobeの(最新の)オープンソースFlexフレームワークを使用するFlashDevelop(Flash Builderの優れた無料の代替品)を使用しています。

AndroidやiOS向けのアプリも開発したいです。一部の部分では、StageWebViewを使用して、FlexAS3コードに書き直したくないコンテンツを表示しています。

一言で言えば、私は開発の初期段階にあり、これは私の最初のフレックスモバイルアプリです。一部の部分では、HTML5機能「localStore」(javascriptのオブジェクトウィンドウの一部)を使用してデータを保存します。しかし、この機能はフレックスのWebkitブラウザでは利用できないようです。また、これが典型的なフレックスの問題なのか、それともアプリがデプロイされるときにも存在するのかを知りたいですか?HTMLパーツをモバイルデバイス(モバイルサファリなど)にロードする場合、この問題は発生しません。

また、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 Framework には Webkit ブラウザーはありません。デスクトップ AIR ランタイムには Webkit のバージョンが含まれています。しかし、それはモバイル アプリケーションには関係ありません。

Mobile AIR は、StageWebView に OS (Android または iOS) の下線付きブラウザー エンジンを使用します。詳細はわかりません。「アプリのブラウザ」を介して公開される機能もありませんが、これを確認するためのドキュメントからの引用は次のとおりです。

モバイル プロファイルおよび拡張モバイル プロファイルのデバイスでは、StageWebView クラスは、デバイスのオペレーティング システムによって提供されるシステム Web コントロールを使用します。したがって、使用可能な機能とレンダリングの外観は、デバイスによって異なる場合があります。

したがって、あなたの問題は Flex や AIR とは関係がなく、テストしている OS でのブラウザーのサポートに関係していると思います。

于 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/
(以前の投稿も参照してください。リンクは最初の段落にあります。)

最後の 2 つのうちの 1 つが問題の解決に役立つことを願っています。

トッド

于 2012-05-14T09:28:53.937 に答える