NSString in UIWebview

后端 未结 2 1548
无人共我
无人共我 2020-11-29 03:07

I have an NSString and a webView in my project (Objective-C for iPhone), I have called index.html in webView and inside it I inserted my script (ja

相关标签:
2条回答
  • 2020-11-29 03:45

    Send string to web view:

    [webView stringByEvaluatingJavaScriptFromString:@"YOUR_JS_CODE_GOES_HERE"];
    

    Send string from web view to Obj-C:

    Declare that you implement the UIWebViewDelegate protocol (inside the .h file):

    @interface MyViewController : UIViewController <UIWebViewDelegate> {
    
        // your class members
    
    }
    
    // declarations of your properties and methods
    
    @end
    

    In Objective-C (inside the .m file):

    // right after creating the web view
    webView.delegate = self;
    

    In Objective-C (inside the .m file) too:

    - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
        NSString *url = [[request URL] absoluteString];
    
        static NSString *urlPrefix = @"myApp://";
    
        if ([url hasPrefix:urlPrefix]) {
            NSString *paramsString = [url substringFromIndex:[urlPrefix length]];
            NSArray *paramsArray = [paramsString componentsSeparatedByString:@"&"];
            int paramsAmount = [paramsArray count];
    
            for (int i = 0; i < paramsAmount; i++) {
                NSArray *keyValuePair = [[paramsArray objectAtIndex:i] componentsSeparatedByString:@"="];
                NSString *key = [keyValuePair objectAtIndex:0];
                NSString *value = nil;
                if ([keyValuePair count] > 1) {
                    value = [keyValuePair objectAtIndex:1];
                }
    
                if (key && [key length] > 0) {
                    if (value && [value length] > 0) {
                        if ([key isEqualToString:@"param"]) {
                            // Use the index...
                        }
                    }
                }
            }
    
            return NO;
        }
        else {
            return YES;
        }
    }
    

    Inside JS:

    location.href = 'myApp://param=10';
    
    0 讨论(0)
  • 2020-11-29 03:47

    When passing an NSString into a UIWebView (for use as a javascript String) you need to make sure to escape newlines as well as single/double quotes:

    NSString *html = @"<div id='my-div'>Hello there</div>";
    
    html = [html stringByReplacingOccurrencesOfString:@"\'" withString:@"\\\'"];
    html = [html stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
    html = [html stringByReplacingOccurrencesOfString:@"\n" withString:@"\\n"];
    html = [html stringByReplacingOccurrencesOfString:@"\r" withString:@""];
    
    NSString *javaScript = [NSString stringWithFormat:@"injectSomeHtml('%@');", html];
    [_webView stringByEvaluatingJavaScriptFromString:javaScript];
    

    The reverse process is well described by @Michael-Kessler

    0 讨论(0)
提交回复
热议问题