2012-05-04 14 views
0

私は、Adobeの(最新の)オープンソースのFlexフレームワークを使用するFlashDevelop(Flash Builderの優れた無料版)を使用しています。Adob​​e Flex(モバイル):StageWebViewとHTML5の機能:window.localStorageはnullですか?

AndroidとiOS用のアプリも開発したいと考えています。いくつかの部分では、StageWebViewを使用して、AS3コードを書き直すように書き換えたくないコンテンツを表示します。

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

また、localStorage機能が利用できない場合、クッキーに戻ります。しかし、これも正しく動作していません。他のすべてのブラウザでIEでも問題はありません。 クッキーの結果:varname=undefined; expires=Thu, 03 May 2012 01:01:41 GMT.

何が起こっているのですか?私はネット上で答えを見つけられませんでしたので、私はここでそれを聞いて

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; 
    }; 

// 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; 
}; 

ローカルストレージ:

はここにいくつかのJavascriptコードです。多分、誰かが私にこれを解決する正しい方向への手がかりを与えるでしょうか?

答えて

1

しかし、この機能は、FlexフレームワークにはWebKitのブラウザではありませんフレックス

のWebKitのブラウザ では利用できないようです。 WebkitのバージョンがDesktop AIRランタイムに含まれています。モバイルアプリケーションでは問題になりません。

モバイルAIRは、StageWebView用のOS(AndroidまたはiOS)の下線付きブラウザエンジンを使用します。私は詳細は分かりません。でも何の機能は、「アプリ内ブラウザ」を介して露光が、ここでこれを確認するquote from the docsです:モバイルおよび拡張モバイルプロファイルでデバイスで

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

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

+0

速い返信ありがとう!申し訳ありませんが、情報を取得します。しかし、あなたがあなたのホームスクリーンに(サファリに表示されているウェブページを)置くとき、私はいくつかの違いに気付くので、あなたがAndroidやiPhoneでどのようなレンダリングエンジンを使用するか教えてください。あなたのホームスクリーン上に置かれたアイコンを使ってそれを開くと、それはSafariを使って表示されず、別のビルドインレンダーエンジン(AppleWebKit)で表示されます。次の質問です:Javascriptを自動的にオンにしますか(Safariで起動していても)、それがWebViewのときにlocalStorageをサポートしていますか? – Codebeat

+0

@Erwinus私は、AndroidとiPhoneの両方がレンダリングエンジンとしてWebKitのバージョンを使用していると想定しています。私が理解しているように、さまざまなことが異なってサポートされています。どの機能がサポートされているのか分かりません。 doc引用に述べられているように。それはレンダリングエンジンに依存します。 – JeffryHouser

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つが問題を解決するのを助けたり、あなたに回避策

トッド

+0

追加情報ありがとう – Codebeat

0

どうやらAirのStageWebViewのはのlocalStorageをサポートしていません。それは完璧な解決策ではありませんが、ソリューションを探す月を費やした後、localstorageをsessionstorageに置き換え、正しくファイルをロードできました。

sessionStorageはstageWebViewのloadURLメソッドでのみ動作し、loadStringにはlocalStorageもsessionStorageもありません。

編集:sessionStorageはAndroidでのみ動作しているようです。私はどちらも取得できません:iOsのためにAdobe Airで動作するlocalStorageもsessionStorageもありません。

編集2:明らかにAdobe Airの2月のアップデートでは、AndroidのAdobe AirでlocalStorageが使用できます。 (まだテストしていません)

関連する問題