2013-06-14 1 views
7

から私はこのような私のビューコントローラに組み込まれたのUIWebViewを持っている:データへの引き渡しおよびEmbeddedのUIWebView

enter image description here

私は自分のWebビュー()への出口を持っていると私は成功した内容をロードすることができますその中にtest.htmlがこれを使用する:

[_graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]];

私は今、ウェブビューにデータを渡すためにしようとしているし、任意の運を持っていませんでした。

NSString *userName = [_graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
NSLog(@"Web response: %@",userName); 

そして、ここではtest.htmlの内容は私のプロジェクトでは、次のとおりです:私は<UIWebViewDelegate>、ここでは私がしようとしているものです追加した

<html> 
    <head></head> 
    <body> 
    Testing... 
     <script type="text/javascript"> 
     function testFunction() { 
      alert("made it!"); 
      return "hi!"; 
     } 
     </script> 
    </body> 
</html> 

私が見ることができる「のテストを...」私のWebViewでしかし、私はアラートや返された "こんにちは!"文字列。

私が間違っていることを知っていますか?

答えて

14

問題は、webviewでページを読み込む前にjavascriptを評価しようとしていることです。まず、あなたのビューコントローラへ<UIWebViewDelegate>プロトコルを採用:

@interface ViewController : UIViewController <UIWebViewDelegate> 

はその後、あなたのビューコントローラにあなたのWebViewのデリゲートを接続要求を行い、最終的にdelegate methodsを実装します。あなたはこの方法はJavaScriptを評価しているときに注意する必要があります制限の一つは、あなたのスクリプトが内に実行されなければならないということです:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    [self.graphTotal loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"]isDirectory:NO]]]; 
} 

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    NSString *userName = [self.graphTotal stringByEvaluatingJavaScriptFromString:@"testFunction()"]; 
    NSLog(@"Web response: %@",userName); 
} 

PS:ここでのWebViewの読み込みが完了したときにユーザーに通知ものです10秒。例えば、警告を消すために10秒以上待っていた場合は、エラーが発生します(は、10秒待ってから復帰できませんでした。)。制限についての詳細はin the docsをご覧ください。

+0

鮮やかな、これは素晴らしい仕事。デリゲートを追加しましたが、Interface Builderでデリゲートを接続しませんでした。私は 'webViewDidFinishLoad'メソッドも必要でした。ありがとう! –

関連する問題