3

私のアプリには、「webView:shouldStartLoadWithRequest:navigationType:」を使用して Obj-c 関数を呼び出す UIWebView コンポーネントがあります。ここでリクエストを解析し、必要な Obj-c コードを呼び出します。

次にやりたいことは、Webview に値を返すことです。たとえば、ステータス、メッセージなどです。

現在、いくつかのソリューションを試しましたが、何も機能していないようです。基本的なものなので、今はコードを投稿していません。

言及する価値のある 1 つの試みは、UIWebView ページでグローバル変数を設定する「stringByEvaluatingJavascriptFromString」を使用することです。次に、グローバル変数の変更を監視する無限ループ (タイムアウトあり) を実行しようとしました。Javascript は、Objective-c 関数から応答が返されたことを認識します。「無限ループ」がJavaScriptスレッドをブロックしていないように見えるため、これは機能していないようです。

以前にこの問題に遭遇した人はいますか。

UIWebViews スクリプト オブジェクトに直接アクセスできる関数「windowScriptObject」があるようです。残念ながらiOSでは利用できません。これに対する回避策を知っている人はいますか。今調べてみると..

ありがとう。

4

2 に答える 2

0

OS X に関する記事はこちら

webView:shouldStartLoadWithRequest:navigationType:Web ビューのコンテンツが読み込まれる前に呼び出されるため、スクリプト オブジェクトはまだ読み込まれません。デリゲートがメッセージを受信すると、スクリプト オブジェクトが読み込まれ、javascript を評価してグローバル変数を設定するためにwebView:didClearWindowObject:forFrame:使用を開始できます。[scriptObject evaluateWebScript: @"alert('hello')"]あなたの問題は、読み込まれているスクリプト オブジェクトとコールバックの間に競合状態があり、スクリプト オブジェクトを待つことで問題が解決することです。

于 2011-06-22T13:41:08.680 に答える
0

だから私はコールバックルートを下ることにしました。

Obj-C で JS コードを実行する呼び出しを行い、ブラウザーでは何もしません。次のコードは、Objective-c から呼び出されるコールバック関数で実行され、すべての作業が完了します。

于 2011-06-23T08:24:21.517 に答える