userName
및 password
필드와 제출 버튼을 포함하는 HTML 파일을 만들었습니다. Submit 버튼을 누르면 JavaScript 함수가 호출되어 userName
값을 반환합니다. 상단 및 WebView에 레이블이 포함 된 기본 응용 프로그램이 있습니다. WebView는 해당 HTML 파일로 렌더링됩니다. ViewController에서 레이블의 텍스트로 WebView의 사용자 이름을 보내야합니다. 나는 UIWebViewDelegate
의 기능에서 stringByEvaluatingJavaScript
을 사용하려했지만, WebView가이 시간으로 로딩을 마쳤을 때 제출 버튼을 누른 후에 데이터를 전달해야하므로 내 문제에는 작동하지 않습니다. 아직 데이터가 userName의 필드에 입력되지 않았습니다!WebView에서 네이티브 앱으로 데이터를 신속하게 게시
0
A
답변
0
해결책을 찾았습니다 : 사용자 이름, 비밀번호 및 제출 버튼을 포함한 양식을 만들기 위해 'Form'요소를 사용했고 Swift 응용 프로그램에서 WebView의 Delegate 기능에 대한 shouldStartLoadWith 요청을 사용했습니다. 제출 단추를 누를 때마다이 함수가 호출되어 양식 요소에 액세스합니다. 그런 다음 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>
여기에 코드입니다