Javascript Swift将数据从WebView发布到本机应用程序

Javascript Swift将数据从WebView发布到本机应用程序,javascript,html,swift,webview,pass-data,Javascript,Html,Swift,Webview,Pass Data,我创建了一个HTML文件,其中包含用户名和密码字段以及一个提交按钮。按Submit按钮将调用JavaScript函数以返回用户名值。我有一个本地应用程序,上面有一个标签和一个WebView。WebView使用该HTML文件呈现。我需要在WebView中发送用户名作为ViewController中的标签文本。我尝试在UIWebViewDelegate的webviewdidfishload函数中使用stringByEvaluatingJavaScript,但这对我的问题不起作用,因为我需要在按下提交

我创建了一个HTML文件,其中包含
用户名
密码
字段以及一个提交按钮。按Submit按钮将调用JavaScript函数以返回
用户名
值。我有一个本地应用程序,上面有一个标签和一个WebView。WebView使用该HTML文件呈现。我需要在WebView中发送用户名作为ViewController中的标签文本。我尝试在
UIWebViewDelegate
webviewdidfishload
函数中使用
stringByEvaluatingJavaScript
,但这对我的问题不起作用,因为我需要在按下提交按钮后传递数据,而不是在WebView完成加载时,因为此时还没有在用户名字段中输入数据

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

名字:

密码:


函数myFunc(){ var user=document.getElementById('form1')。元素[0]。值; //document.getElementById(“按钮”).innerHTML=user; 返回用户; } 函数validateForm(){ var x=document.forms[“form1”][“username”].value; var y=document.forms[“form1”][“password”].value; 如果(x==“”){ 警告(“必须填写姓名”); 返回false; } 如果(y==“”){ 警报(“必须填写密码”); 返回false; } 如果(x==“”&&y==“”){ 警报(“必须填写字段”); 返回false; } }