hideito on 8月 26th, 2010

iPhone・iPad上で閲覧するJSのWebアプリを開発していたところ、

jQueryを使用したクロスドメインのPOST通信(.ajaxや.post)が、iPhoneOS3の場合だけ送信できない現象に遭遇!!

iOS4やiPadではデータ送信できている。

詳細原因は不明ですが、以下のページを参考にjQueryプラグインつくったらデータ送信できた!!

jQuery でなんちゃってクロスドメイン POST

POST通信に引数付きで送りたかったので、その部分だけ修正しました。
引数はオブジェクト渡し

JavaScript:
  1. $.extend({
  2.   xpost : function(url, data, callback) {
  3.     var name = 'dummyxpostframe';
  4.     var flush = function() {
  5.       $('form[target=' + name + ']').remove();
  6.       $('iframe[name=' + name + ']').remove();
  7.     }
  8.     var iframe = $('<iframe />').attr('name', name).hide().appendTo('body');
  9.     if(typeof callback == 'function') iframe.load(callback);
  10.     iframe.load(flush);
  11.  
  12.     $form = $('<form method="POST" />').attr('action', url).attr('target', name);
  13.     for(key in data){
  14.         var input = document.createElement('input');
  15.         input.setAttribute('type' , 'hidden');
  16.         input.setAttribute('name' , key);
  17.         input.setAttribute( 'value' , data[key] );
  18.        
  19.         $form.append($(input));
  20.     }
  21.    
  22.     $form.hide().appendTo('body').submit();
  23.   }
  24. });

  • Share/Bookmark

Tags: , ,

Flexでのやり方は以下

Actionscript:
  1. Application.application.parameters

Flash(AS3)の場合
以下、hogeパラメータを取得する例

Actionscript:
  1. var flashVars:Object = this.loaderInfo.parameters;
  2. var hoge:String = flashVars['hoge'];

  • Share/Bookmark

Tags: ,

hideito on 8月 13th, 2010

SQLResult.lastInsertRowIDで取得できるみたい。
知らなかった・・・
http://www.adobe.com/livedocs/flex/3_jp/langref/flash/data/SQLResult.html#lastInsertRowID

  • Share/Bookmark

Tags: , ,

AIRのプログラム内からアプリ定義ファイルに設定しているアプリIDやバージョンを取得して使用したい場合は以下

Actionscript:
  1. var appDescriptor:XML = NativeApplication.nativeApplication.applicationDescriptor;
  2.     var ns:Namespace = appDescriptor.namespace();
  3.     var appid:String = appDescriptor.ns::id;
  4.     var appVersion:String = appDescriptor.ns::version;

  • Share/Bookmark

Tags: , ,

リッチテキストエディタ等で入力したHTMLテキスト文字列を通常テキスト文字列状態にしたい場合は、いろいろやり方あるかもしれないけどLabelコンポーネント使ってやってみた。

Actionscript:
  1. //HTMLテキストを通常テキストへ変換
  2.     var label:Label = new Label();
  3.     label.visible = false;
  4.     this.addChild(label);
  5.     label.htmlText = htmlText;
  6.     label.validateNow();
  7.     contentComment.text = label.text;
  8.     this.removeChild(label);
  9.     label = null;

labelコンポーネントを一時的に生成して、htmlTextプロパティにHTMLテキスト文字列セット。
一旦、label.validateNow();でlabelを更新してからlabel.textを取得すると通常テキスト文字列が取得できる。

  • Share/Bookmark

Tags: , , ,

<問題点>
JavascriptでHTML5のvideo(またはaudio)タグを動的に生成して表示するページをiPhoneOS3で閲覧すると、videoの表示位置がおかしくなるケースがある。
(CSSで指定している位置からずれた位置に表示される。)

タップしたりフリックしたりしてブラウザの画面描画処理が動作すると正しい位置に表示される。

※iOS4およびiPad(iPhoneOS3.2)では問題なし。

<解決方法>
video(またはaudio)タグを動的に生成する際に、videoタグのCSSで「visibility: hidden;」に設定しておき、htmlレンダリングが終わった段階(画面表示させたいタイミング)で「visibility: visible;」に設定したところ改善された。
  • Share/Bookmark

Tags: , ,

iPhoneOS3でtranslate3dが動かないケースがある。

<条件>
translate3d動かそうとしているdiv要素にclassを設定し、CSSでこのclassに「position: absolute;」と書くとなぜか動作しない。

※iOS4をインストールしたiPhone3GSとiPadではこの現象は発生しない。

<追記>

いろいろやってみた結果、根本的な解決方法は移動対象のdiv要素の親要素に「position: absolute;」を設定することでした。はっきりとは分かりませんが、CSSの座標系プロパティに影響を受けるようです。
  • Share/Bookmark

Tags: , , ,

hideito on 7月 5th, 2010

http://journal.mycom.co.jp/special/2009/html5-2/007.html

●localStorage … オリジン(プロトコル + ドメイン + ポート)ごとに異なるストレージとなる。複数のウィンドウをまたいでストレージは共通。ウィンドウが閉じられてもデータは消失しない

http://www.ninxit.com/blog/2010/03/22/...

●localStorageは文字列がしか保存できないから構造体等はJSON文字列で保存する

  • Share/Bookmark

Tags: ,

HTML+javascriptで作成した縦に長いページを

iPhone/iPodのSafariに表示させた際、ページの下部を閲覧後、

上部へめいいっぱいスクロールさせた際にURLツールバーが表示される。

上部へスクロールさせた場合、URLツールバーが表示されることを防ぐことはできないが、javascriptでURLツールバーが表示されたら1.4秒後にURLツールバーを強制的に非表示にすることで、画面を広くできる上にURLツールバーに入力したい場合に操作の邪魔をしない程度の動きとなりそう。

JavaScript:
  1. //jQuery使用
  2. //スクロールした際にcheckScroll()を実行する。
  3. function checkScroll(){
  4.   var sy = $(window).scrollTop();
  5.   if (sy == 0){
  6.     window.setTimeout("hideToolBar()", 1400);
  7.   }
  8. }
  9.  
  10. function hideToolBar(){
  11.   var sy = $(window).scrollTop();
  12.   if (sy == 0){
  13.     $(window).scrollTop(0);
  14.   }
  15. }

  • Share/Bookmark

Tags: ,

スクロール中のイベントがとれない!!

http://shitappaprogramer.seesaa.net/article/140817780.html

http://wiki.sohaya.com/index.php/MobileSafariの制限

  • Share/Bookmark