Swift post 从 WebView 到原生应用的数据

Swift post data from WebView to native app

我创建了一个 HTML 文件,其中包含 userNamepassword 字段以及一个提交按钮。通过按下提交按钮,一个 JavaScript 函数被调用到 return userName 值。我有一个包含顶部标签和 WebView 的本机应用程序。 WebView 使用该 HTML 文件呈现。我需要将 WebView 中的用户名作为 ViewController 中的标签文本发送。我尝试在 UIWebViewDelegatewebViewDidFinishLoad 函数中使用 stringByEvaluatingJavaScript 但它对我的问题不起作用,因为我需要在按下提交按钮后传递数据,而不是在 WebView 完成加载时传递数据尚未在用户名字段中输入任何数据!

我想出了解决办法: 我使用 'Form' 元素创建了一个包含用户名、密码和提交按钮的表单,在 Swift 应用程序中我使用了 shouldStartLoadWith 请求 WebView 的委托函数。每次点击提交按钮时,都会调用此函数来访问表单元素。然后我调用了 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>