【问题标题】:How to pass a variable from javascript to objective C and Objective C to Javasctipt in ios如何在 ios 中将变量从 javascript 传递到目标 C 和目标 C 到 Javascript
【发布时间】:2015-01-23 07:42:16
【问题描述】:

我是一名 iOS 开发人员,不熟悉 javascript。

我想创建 Javascript 到 Objective C 和 Objective C 到 Javascript 之间的通信。

如何在 ios 中将变量从 javascript 传递给 Objective C 和 Objective C 传递给 Javasctipt。

如果有人有参考,请告诉我们?

【问题讨论】:

    标签: javascript ios objective-c


    【解决方案1】:

    我在使用 Parse CloudCode 时编写 JavaScript。就我而言,我使用 CloudCode 来调用 Stripe API。

    例如:

    Objective-C

    NSDictionary *parameters = @{
                                     @"customerId": stripeCustomerId,
                                     @"amount": @(100),      
                                };
    
    [PFCloud callFunctionInBackground:@"chargeCustomer" withParameters:parameters block:block];
    

    JavaScript

    Parse.Cloud.define("chargeCustomer", function(request, response) {
      Stripe.Charges.create({
          amount: request.params.amount, // in cents
          currency: "usd",
          customer: request.params.customerId,
        },{
        success: function (httpResponse) {
            console.log(httpResponse);
            response.success(httpResponse);
        },
        error: function (httpResponse) {
            console.error(httpResponse.message);
            response.error(httpResponse.message);
        }
      });
    });
    

    如您所见,在这种情况下,要将变量从 Objective-c 传递到 javascript,您可以使用 request.params。

    【讨论】:

    • 这个答案对 Parse 来说非常具体,而 OP 要求提供一种在本机代码和 JS 代码之间进行通信的通用方法。
    【解决方案2】:

    如果你的目标是iOS8,你可以考虑使用WKWebView而不是UIWebView,在这方面已经有了很大的改进。好的起点是the WKWebView reference docs 和这个NSHipster article

    【讨论】:

    • 目标是iOS 7,不使用swift..,基本通信将字符串传递给Objective C,如何接收该字符串..我如何在Javascirpt中调用Objc方法
    • 如果你的目标是
    【解决方案3】:

    您可以使用原生 iOS 对象来执行此操作。

    从 Obj-C 到 JS

    - (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
    

    它在 UIWebview 中加载的页面中注入或调用预先存在的方法/对象。它返回JS返回给你的值

    UIWebView Class Reference

    从 JS 到 Obj-C

    实现UIWebView 协议,您可以在请求开始之前处理它:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest (NSURLRequest *)request navigationType (UIWebViewNavigationType)navigationType
    

    因此,您必须从 JS 调用具有自定义架构 http 的 URL,例如 test://。然后你会在我之前写的委托方法中解析请求。

    【讨论】:

    • 如果你对 JS 到 Obj-C 有任何想法,你能用一个例子来解释一下吗..,其实我已经尝试过.. 但没有实现.. 无法将对象从 js 获取到 ObjC
    • 从 JS 调用 window.location = "test://functionName?queryString"; 并在前面列出的方法中,检查架构:if ([request URL] scheme] isEqualToString: @"test"]{ // doSomething }
    猜你喜欢
    • 2011-04-08
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多