如何从服务器端 JavaScript 获取值并将它们存储在 Swift 的 plist 中?

Posted

技术标签:

【中文标题】如何从服务器端 JavaScript 获取值并将它们存储在 Swift 的 plist 中?【英文标题】:How to get values from server side JavaScript and store them in a plist in Swift? 【发布时间】:2017-08-03 13:17:32 【问题描述】:

android 中,我可以使用这种方法来实现它。谁能告诉我如何在 ios 中使用UIWebViewWKWebView 实现这一目标?

@javascriptInterface
    public boolean RememberMe(String UserData) 
        String str = UserData.replace("\\", "");
        str = str.substring(1, str.length() - 1);

        try 
            clsDBHelper DB = new clsDBHelper(MainActivity.this);
            JSONArray StoreData = DB.GetQueryNew("Select * from UserInfo", null);
            if (StoreData == null) 
                JSONArray Obj = new JSONArray(str);
                Integer TransID = Obj.getJSONObject(0).getInt("TransID");
                Integer OPID = Obj.getJSONObject(0).getInt("OPID");
                Integer ProviderID = Obj.getJSONObject(0).getInt("ProviderID");
                Integer CustomerID = Obj.getJSONObject(0).getInt("CustomerID");
                Integer CompID = Obj.getJSONObject(0).getInt("CompID");
                String UserID = Obj.getJSONObject(0).getString("UserID");
                String Password = Obj.getJSONObject(0).getString("Password");
                String RegMoblileNo = Obj.getJSONObject(0).getString("RegMoblileNo");
                String RegEmialID = Obj.getJSONObject(0).getString("RegEmialID");
                Integer Verifyflag = (Obj.getJSONObject(0).getBoolean("Verifyflag") == true ? 1 : 0);
                Integer IsActive = (Obj.getJSONObject(0).getBoolean("IsActive") == true ? 1 : 0);
                String OTP = Obj.getJSONObject(0).getString("OTP");
                String OTPTimeStamp = Obj.getJSONObject(0).getString("OTPTimeStamp");
                String OperatorID = Obj.getJSONObject(0).getString("OperatorID");
                DB.ExeNonScalerQuery("INSERT INTO UserInfo(TransID,OPID,ProviderID,CustomerID,CompID,UserID,Password,RegMoblileNo,RegEmialID,Verifyflag,IsActive,OTP,OTPTimeStamp,OperatorID)values("
                        + TransID + "," + OPID + "," + ProviderID + "," + CustomerID + "," + CompID + ",'" + UserID + "','" + Password + "','" + RegMoblileNo + "','" + RegEmialID + "'," + Verifyflag + "," + IsActive + ",'" + OTP + "','" + OTPTimeStamp + "','" + OperatorID + "')");
            
            DB.CloseDB();
         catch (JSONException e) 
            e.printStackTrace();
            clsDBHelper DB = new clsDBHelper(MainActivity.this);
            DB.GetQueryNew("Delete  from UserInfo", null);
            DB.CloseDB();
        
        return true;
    

当我登录应用程序时,JavaScript 中的RememberMe 函数会向我发送一个字符串,我需要将其保存在 plist 中。

【问题讨论】:

【参考方案1】:

在 iOS 上,您通常使用 WKScriptMessageHandler 处理此问题: https://developer.apple.com/documentation/webkit/wkscriptmessagehandler?preferredLanguage=occ

本质上,你使用 WKWebView,然后在 JavaScript 中调用这个方法:

window.webkit.messageHandlers.notification.postMessage( "message" );

然后在您的应用代码中实现WKScriptMessageHandler,您可以将其挂接到您的网络视图中,并使用它来接收消息:

func userContentController( 
    userContentController: WKUserContentController, 
    didReceiveScriptMessage message: WKScriptMessage) 
    // do stuff

您可以在 NSHipster 上详细了解它: http://nshipster.com/wkwebkit/

【讨论】:

func webViewDidFinishLoad(webView : UIWebView) WebView.stringByEvaluatingJavaScript(from:"LoginByMobileApp()") 如何使用 WKWebView 实现它 最好将其作为一个问题而不是对此答案发表评论,但是......这样的事情似乎是你想要进入的方向:***.com/questions/25504481/…跨度> 【参考方案2】:

似乎您正在从那个“remmeber”方法中获取数组,所以将第一个元素保存在 var 中,然后测试它的类型。如果它的 json 则像 NSDictionary 一样检索数据

【讨论】:

请举个例子 请检查 this 以转换为 json

以上是关于如何从服务器端 JavaScript 获取值并将它们存储在 Swift 的 plist 中?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 提示框中获取值并将其传递给 PHP 变量以便能够保存在 SQL 中?

从 MySQL 获取查询并将其打印到 javascript 日历中

使用 PHP 从 URL 获取值并将其发送到 javascript 变量时出错

从对象获取属性值并将其分配给javascript中的变量

如何在Javascript中从数组中提取值

gomain函数中如何动态获取数据