2013-08-09 24 views
5

UIWebViewにテキストフィールドをあらかじめ入力する必要があります。javascriptがこの問題を解決する最良の方法であることを理解してください。残念ながら、私はjavascriptの何も知らないし、最後の数時間、どこにもいなくなってしまった。WebViewテキストフィールドの事前入力

最新しくじった試み:

- (void)webViewDidFinishLoad:(UIWebView *)webView 
{ 
    // username field id = username_5 & pw field id = password_5 
    NSString *javascript = @"\ 
    var user = 'testUser';\ 
    var pw = 'testPW';\ 
    document.getElementById('username_5').value = user; \ 
    document.getElementById('password_5').value = pw; \ 
    ;"; 
    // Execute JS 
    [_emailWebView stringByEvaluatingJavaScriptFromString:javascript]; 
} 

誰もが正しい方向に私を指すことができますか?

-EDIT-

私はまた、場合には、ページが完全にロードされていなかったし、私のようなものを呼び出す場合、呼び出しを遅らせるしようとした試みた:

- (void)webViewDidFinishLoad:(UIWebView *)wv 
{ 
    [NSObject cancelPreviousPerformRequestsWithTarget:self]; 
    [self performSelector:@selector(injectJavascript) withObject:nil afterDelay:1.0]; 
} 

- (void)injectJavascript 
{ 
    [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password_5').value = 'testPW';"]]; 
    [self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.alert('test');"]]; 
} 

を警告が表示されますが、ID password_5を持つフィールドがあります満たされていない。

問題のフィールドはフォーム内にネストされています。違いがあれば分かりませんか?

-EDIT 2 -

私はこの問題は、私は別のサイトでこれを試してみました、それが働いたとして、対象ウェブサイト上でネスティング/ HTMLに関連しているかなり確信しています。

標的部位は、次のようにネストされている:

<html> 
    <head> … </head> 
    <body onload="FinishLoad(1);hideJSWarn();"> 
     <div id="noJSWarn" class="cssSecurityWarning" style="display: none;"> … </div> 
     <table id="table_LoginPage_1" > … </table> 
     <table id="table_LoginPage_2" > … </table> 
     <blockquote> 
     <form id="frmLogin_4" onsubmit="return Login(1)" autocomplete="off" method="POST" action="login.cgi" name="frmLogin"> 
      <input id="tz_offset_5" type="hidden" name="tz_offset"></input> 
      <table id="table_LoginPage_3" > 
      <tbody> 
       <tr> … 
       <td valign="top"> 
        <table id="table_LoginPage_6" > 
        <tbody> 
         <tr> 
         <td> … </td> 
         <td> 
          <input id="username_5" type="text" size="20" name="username"></input> 
+1

イムではなく動作しますが、uが '欠落していない;' ' 'testPW''後? –

+0

はい、ありがとう - タイプミス。 – Robert

+1

私はちょうどあなたのコードをテストしました(以前のコメントで提案された ';'が追加されています)、あなたのJSコードはうまく動作します。だから、おそらくあなたのHTMLコードを確認してください。OK –

答えて

5

:これは、コードは次のようになります方法です。 (どうやらページに移動するために使用されたものに依存して異なります)これらのIDを差し込む

NSString *body = [self.emailWebView stringByEvaluatingJavaScriptFromString: 
        @"document.getElementsByTagName('body')[0].outerHTML"];    
NSLog(@"%@", body); 

[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('username').value = '%@';", user]]; 
[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('password').value = '%@';", pw]]; 
[self.emailWebView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('input_LoginPage-ipad_1').click();"]]; 

はそれを解決 結局のところ、これは違うと返されたものにIDを与えます。

ご協力いただきありがとうございます。

+0

このhttp://stackoverflow.com/questions/37644551/auto-fill-forms-in-webview-by-javascript-androidをご覧ください。それはあなたの助けが必要です。 –

4

あなたは1 NSStringの内部でJavaScriptコードを配置し、stringByEvaluatingJavaScriptFromStringで実行する必要があります。私はFirefoxでそれらを強調表示してinspect elementを選択することにより、要素IDを取得していた

[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('email').value = '%@'", email]]; 
[self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"document.getElementById('pass').value = '%@'", password]]; 
+0

ありがとうございます。私はそれを試してみましょう。 – Robert

+0

Np。それがあなたを助けてくれたら教えてください。 –

+0

まだ喜びはありません。同僚は 'C#'スクリプトでフィールドをプレフィックスにしていましたが、同じ 'javascript'は' Objective-C'で動作していません。 – Robert

1

使用このコードこれは、それが役立つかどうかわから

view.loadUrl("javascript:(function() { " 
    + " document.getElementById('login').value = '" + emailAdress+ "';" 
    + " document.getElementById('login').readOnly='true'" 
    + "})();"); 
関連する問題