2017-02-01 6 views
0

userNamepasswordのフィールドと送信ボタンを含むHTMLファイルを作成しました。 Submitボタンを押すと、JavaScript関数が呼び出されてuserNameの値が返されます。私は一番上のラベルとWebViewを含むネイティブアプリを持っています。 WebViewはそのHTMLファイルでレンダリングされます。 ViewControllerでラベルのテキストとしてWebViewのユーザー名を送信する必要があります。私はstringByEvaluatingJavaScriptwebViewDidFinishLoadUIWebViewDelegateの機能で使用しようとしましたが、この時点でWebViewのロードが完了していないときにデータを渡す必要があるため、問題はありません。WebViewからネイティブアプリにスウィフトポストデータ

答えて

0

解決策を見つけました:ユーザー名、パスワード、送信ボタンを含むフォームを作成するために 'Form'要素を使用しました.WebViewのDelegate機能のshouldStartLoadWithリクエストを使用しました。 Submitボタンがタップされるたびに、この関数が呼び出されてForm要素にアクセスします。次に、stringByEvaluatingJavaScript関数を呼び出して、HTMLファイルのjavascript関数にアクセスしました。ここでは、コードは次のようになります。

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool { 

    if (navigationType == UIWebViewNavigationType.formSubmitted) { 

     // form is submitted or button is clicked , perform your actions here 

     //let result = webView.stringByEvaluatingJavaScript(from: "document.getElementById('form1').elements[0].value")! 

     let result = webView.stringByEvaluatingJavaScript(from: "window.myFunc()")! 

     lbl.text = result 

    } 

    return true 
} 

そしてここでは、HTMLファイルです:

<body> 

<form id="form1" name="form1" action="myFunc()" onsubmit="return validateForm()" method="post"> 

First name:<br> 

<input type="text" name="username" id="user"> 

<br> 

Password:<br> 

<input type="password" name="password"> 

<br><br> 

<input type="submit" value="Submit"> 

</form> 

<Script> 

function myFunc(){ 

var user = document.getElementById('form1').elements[0].value; 

//document.getElementById("button").innerHTML = user; 

return user; 

} 

function validateForm() { 

var x = document.forms["form1"]["username"].value; 

var y = document.forms["form1"]["password"].value; 

if (x == "") { 

    alert("Name must be filled out"); 

    return false; 
} 

if (y == "") { 

    alert("Password must be filled out"); 

    return false; 
} 

if (x== "" && y == "") { 

    alert("Fields must be filled out"); 

    return false; 
} 

} 

</Script> 

</body> 
関連する問題