0

アプリケーションに問題があります。ある種の webApp であるアプリケーションを構築しています。したがって、アプリケーションはサーバー上で実行され、UIWebview を介してやり取りします。

それでは、ここで何を達成しようとしているのかを説明しましょう。WebページにはいくつかのJavascript関数があり、stringByEvaluatingJavaScriptFromStringの例を使用してこれらの関数とやり取りします:コード:

[webView stringByEvaluatingJavaScriptFromString:@"tagMe()"];

サーバーはこのコマンドを実行し、次のことを行います

URLPrefix を ServerReply://() に設定し、これをキャッチします

- (BOOL)webViewUIWebView *)webView shouldStartLoadWithRequestNSURLRequest *)request navigationTypeUIWebViewNavigationType)navigation Type

したがって、URL にプレフィックス ServerReply:// がある場合、アプリで関数が実行されます。

これまでのところ、すべてがうまく機能していますが、ユーザーが HOME ボタンを押すか、電話を受けると. ApplicationDidEnterBackground メソッドが呼び出され、別の JS 関数を呼び出したい

コード:

[webView stringByEvaluatingJavaScriptFromString:@"gettingClosed()"];

サーバーは、プレフィックス SaveClientData://(somestring) を含む URL を提供する必要があります。

そのため、アプリが閉じて機能しません....私のコードは次のようなものです

コード:

//AppDelegate.m

  - (void)applicationDidEnterBackground:(UIApplication *)application {
    [webViewController killTrigger];
 }

//webViewController. m

-(void)killTrigger{

[webView stringByEvaluatingJavaScriptFromString:@"gettingClosed()"];

}

これは機能しませんが、コードを実行すると:

  - (void)applicationDidEnterBackground:(UIApplication *)application {
    [webViewController killTrigger];
 }

//webViewController. m

-(void)killTrigger{

NSLog(@"killTrigger got called");

}

アプリを終了するとログ メッセージが表示されます ...

[webView stringByEvaluatingJavaScriptFromString:@"gettingCl osed()"]; を実行することは可能ですか? アプリがバックグラウンドに移動した場合は? または、同じ結果を得るための別のアプローチがありますか...?

事前にt​​nx、

バート

4

2 に答える 2

0

私は同様のシナリオを持っており、いくつかの奇妙な動作をしています。まだ問題は解決していませんが、いくつかの発見があります。共有しますので、これを開発して解決策を見つけることができるかもしれません。

一般に、applicationDidEnterBackground によって呼び出される JS コード (および applicationWillResignActive によって呼び出されるコード) が実行されることがわかりました。

これをテストするために、すべての JS コードに対してグローバルなカウンターを設定し、BG に入る前にカウンターをインクリメントし、バックグラウンドでその状態を確認します (確認するために、基本的に cntr_# という新しいファイルを作成する汚い回避策を使用しました{counter value}) であるため、JS 関数が呼び出されると仮定します (カウンターがインクリメントされるため)。

ただし、カウンターをインクリメントする前に、私の JS 関数は XMPP メッセージも送信します。ネットワーク トラフィックをスニッフィングすると、アプリが再開された直後に XMPP メッセージが送信されていることがわかります。現在、2 つの可能性があります。BG への移行で XMPP 接続を作成する可能性がないか (これは妥当ではないと思います)、XMPP 機能が非同期で発生し、その実行が延期されるかのいずれかです。

アップデート。

私が XMPP に使用していた JS ライブラリは実際には非同期であり、そのキューでフラッシュを呼び出すと XMPP メッセージの欠落の問題が解決されることがわかりました。これがあなたにも役立つことを願っています。

于 2012-01-05T16:01:35.937 に答える