简体   繁体   English

从javascript调用objective-c方法

[英]Call objective-c method from javascript

I make any webView And I want to call from javascript any objective c method which return any parameter. 我做任何webView我想从javascript调用任何返回任何参数的Objective c方法。 I tried many ways but not allowed . 我尝试了很多方法,但不允许。 Objective c method here: 这里的客观方法:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *URL = [request URL];
    if ([[URL scheme] isEqualToString:@"donordialog"])
    {
        // now we need to figure out the function part
        NSString *functionString = [URL resourceSpecifier];

        if ([functionString hasPrefix:@"bloodTypeChanged"])
        {
            // the blood type has changed, now do something about it.
            NSString *parameter = [functionString stringByReplacingOccurrencesOfString:@"bloodTypeChanged" withString:@""];

            // remove the '(' and then the ')'
            parameter = [parameter stringByReplacingOccurrencesOfString:@"(" withString:@""];
            parameter = [parameter stringByReplacingOccurrencesOfString:@")" withString:@""];

            // log the paramter, as I don't know what to do with it right now
            UIAlertView *alert=[[ UIAlertView alloc] initWithTitle:@"iosdan javascripti"
                                                                           message:@"ddddddddd"
                                                                    delegate:nil
                                                                cancelButtonTitle:@"OK"
                                                               otherButtonTitles:nil];

            [alert show];
            //NSLog(@"%@", parameter);
        }

        return NO;
    }

    return YES;
}

javascript: JavaScript的:

function myFunction() {
    url="http://example.com";
    window.location="donordialog:blooTypeChanged("+url+")";
}

html: HTML:

<button onclick="myFunction()">click me</button>

comment: I need that: it is obj c method for example. 评论:我需要:例如,它是obj c方法。 aaa{} . aaa {}。 My aaa method must return any parameter. 我的aaa方法必须返回任何参数。 and I have wevView. 我有wevView。 I loaded any url to this webView: for example www.example.com/forios . 我将任何网址加载到此webView:例如www.example.com/forios。 I need call this (aaa) method from javascript which it is in html on www.example.com/forios and alert the result of aaa function. 我需要从javascript调用这个(aaa)方法,它在www.example.com/forios上的html中,并提醒aaa函数的结果。 understand?. 了解?。 If understand, dont watch to my code. 如果明白,不要看我的代码。 help please yourself anyway. 无论如何,请帮助自己。 android version of my question: Call Java function from JavaScript over Android WebView I want to alert some parameter returning from method. 我的问题的android版本: 通过Android WebView从JavaScript调用Java函数我想提醒一些从方法返回的参数。 Help please. 请帮忙。 Thanks. 谢谢。

Here is a quick and easy solution without JavaScriptCore for backwards compatibility (might consider upgrading to Javascriptcore ). 这是一个快速简单的解决方案, 没有 JavaScriptCore可以向后兼容(可能会考虑升级到Javascriptcore)。 Here's an easy implementation. 这是一个简单的实现。

Note: this solution is for UIwebview only (not UIscrollview) 注意:此解决方案仅适用于UIwebview(不是UIscrollview)

//viewcontroller.h //viewcontroller.h

@interface ViewController : UIViewController<UIWebViewDelegate>

@property (strong, nonatomic) IBOutlet UIWebView *viewWeb;
@end

//viewcontroller.m //viewcontroller.m

- (void)viewDidLoad
{
    [super viewDidLoad];


    NSString *fullURL = @"http:player.fusion.fm";
    NSURL *url = [NSURL URLWithString:fullURL];
    NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    [_viewWeb loadRequest:requestObj];
   _viewWeb.delegate = self;
 }

 -(BOOL)webView:(UIWebView *)_viewWeb shouldStartLoadWithRequest:(NSURLRequest *)request   navigationType:(UIWebViewNavigationType)navigationType {
    NSURL *url = request.URL;
    if ([[url scheme] isEqualToString:@"ios"])
    {
        [self mute]; // <-- YOUR OBJ-C FUNCTION HERE
        NSLog(@"test");
        return YES;
    }else
     {
        return YES;
    }

 }

// The Javascript (within webview) // Javascript(在webview中)

try
{
  window.location="ios://null"
}
catch(err)
{
}

Source: http://adoptioncurve.net/archives/2012/09/calling-objective-c-methods-from-javascript-in-a-uiwebview/ 资料来源: http//adoptioncurve.net/archives/2012/09/calling-objective-c-methods-from-javascript-in-a-uiwebview/

The most usual approach that I used to interact from javascript within obj-c is to changing hash. 我用来与obj-c中的javascript进行交互的最常用方法是更改​​哈希。 On required event in your js write window.location.hash = '#cmd_alertMessage'; 在js中的必需事件中写入window.location.hash = '#cmd_alertMessage'; after this your - (BOOL)webView: shouldStartLoadWithRequest: navigationType: will be called: 在此之后你的- (BOOL)webView: shouldStartLoadWithRequest: navigationType:将被调用:

   - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSArray * compenents = [request.URL.absoluteString componentsSeparatedByString:@"#"];
    if (compenents.count > 1) {
        NSString * cmd = compenents[1];
        if ([cmd rangeOfString:@"cmd_alertMessage"].location != NSNotFound) {
            // Call your obj-c method and get appropriated param
            NSString * jsFunction = [NSString stringWithFormat:@"setParameterFromAAAMethod('%@')", [self aaa]];
            // Return this param back to js
            NSString * alertMessage = [webView stringByEvaluatingJavaScriptFromString:jsFunction];
        }
    }


    return YES;
}

- (NSString *)aaa
{
    return @"This is special parameter that you need";
}

So, it will work in 3 steps: 所以,它将分3个步骤:

  1. Invoke hash changing to request parameter from obj-c code in js ; 调用散列更改以从js中的 obj-c代码请求参数;
  2. Handle hash changed (parameter request) and return in back to js in obj-c ; 处理散列更改(参数请求)并返回到obj-c中的 js;
  3. Handle recieved parameter in js again 再次处理js中的接收参数

You can set a hidden iframe's location to something specific to your app, and then intercept that request in Obj-C. 您可以将隐藏的iframe位置设置为特定于您的应用的内容,然后在Obj-C中拦截该请求。

Here's an overview and some examples: http://blog.techno-barje.fr//post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/ 以下是概述和一些示例: http//blog.techno-barje.fr//post/2010/10/06/UIWebView-secrets-part3-How-to-properly-call-ObjectiveC-from-Javascript/

Well, I am not sure whether I got your question correct or not, but if you want to call any javascript method, then you can do this way:- 好吧,我不确定我的问题是否正确,但是如果你想调用任何javascript方法,那么你可以这样做: -

[yourWebView stringByEvaluatingJavaScriptFromString:@"yourMethodName()"];

You can also pass parameters in above method. 您也可以在上面的方法中传递参数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从Safari JavaScript中调用Objective-C? - Call Objective-C from Safari javascript? 在AppDelegate中从Objective-C调用JavaScript - Call JavaScript from Objective-C in AppDelegate javascript中的Objective-C方法未调用 - Objective-C method from javascript is not called 从Javascript调用Objective-C方法 - Calling an Objective-C method from Javascript 如何在phonegap ios版本中从JavaScript调用Objective-C方法 - How to call a objective-C method from javascript in phonegap ios version 如何使用单个参数从Javascript调用Objective-C方法并在Xcode中对其进行处理 - How do I call an Objective-C method from Javascript with a single parameter and handle it in Xcode 如何在UIWebView中从Javascript调用Objective-C方法? - How do I call an Objective-C method from Javascript in UIWebView? 如何在Cocoa / WebKit应用程序中从Javascript调用Objective-C方法? - How to call an Objective-C method from Javascript in a Cocoa/WebKit app? 如何使用本机Objective-C方法从本地HTML5文件中的javascript函数调用本机Objective-C方法,反之亦然? - How to call a native Objective-C method from javascript function in a local HTML5 file and vice-versa using native Objective-C method? 从 Applescript 调用 Swift/objective-c 方法 - Call Swift/objective-c method from Applescript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM