gpt4 book ai didi

javascript - Swift 将数据从 WebView 发布到 native 应用程序

转载 作者:行者123 更新时间:2023-11-30 12:43:16 25 4
gpt4 key购买 nike

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

最佳答案

我找到了解决办法:我使用“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>

关于javascript - Swift 将数据从 WebView 发布到 native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41989761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com