【问题标题】:Swift post data from WebView to native appSwift 将数据从 WebView 发布到本机应用程序
【发布时间】:2017-02-01 21:07:09
【问题描述】:

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

【问题讨论】:

    标签: javascript html swift webview pass-data


    【解决方案1】:

    我想出了解决方案: 我使用“表单”元素创建了一个包含用户名、密码和提交按钮的表单,在 Swift 应用程序中我使用了 WebView 的委托函数的 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 2013-10-16
      相关资源
      最近更新 更多