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

标签 javascript html swift webview pass-data

我创建了一个 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/

相关文章:

javascript - 查找DIV id内容并通过AJAX加载

javascript - 部分文本框只读,具有默认值

去除标签的 PHP 函数,白名单标签和属性列表除外

html - R 节点 {xml_nodeset} 到 xml 或 html

ios - 用户输入的值保存到核心数据(?)但未出现在 TableView 中

ios - 如何在一个部分中组合相同的日期对象?

ios - 音量提升 AudioKit

javascript - AngularJS ng-repeat 忽略过滤函数

javascript - 获取 html DOM 元素内容周围的边框

android - 使用 Simperium 从 Android 更新 HTML 列表