zoukankan      html  css  js  c++  java
  • Mac Webview OC与JS交互实现

    1、首先,需要定义一个JS可识别的变量(如external)用于OC与JS交互

    - (void)webView:(WebView *)sender didClearWindowObject:(WebScriptObject *)windowObject forFrame:(WebFrame *)frame
    {
        [self.windowScriptObject setValue:self forKey:@"external"];
    }

    2、JS调用OC代码

    第一步、在OC中声明对JS开放的函数,如下:

    + (BOOL)isSelectorExcludedFromWebScript:(SEL)selector {  
      
        if ( selector == @selector(Login:password:)) {  
            return NO;  
        }  
        return YES;  
    }  

    第二步、建立名称索引

    + (NSString *) webScriptNameForSelector:(SEL)sel {  
      
        if (sel == @selector(Login:password:)) {  
            return @"Login";  
        }  
        return nil;  
    } 

    这样,在JS中只要使用external.Login(account,password)就是调用OC中的[self Login:account password:password]。

    3、OC调用JS的函数

    - (id)callWebScriptMethod:(NSString *)name withArguments:(NSArray *)arguments;
    - (void)callWebScriptMethod:(NSString *)name withArguments:(NSArray *)arguments{
        
        if (arguments.count == 0
            || arguments == nil)
        {
            return;
        }
        
        @try {
            dispatch_async(dispatch_get_main_queue(), ^{
                [self.windowScriptObject callWebScriptMethod:name withArguments:arguments];
            });
            
        }
        @catch (NSException *exception) {
            NSLog(@"ex=%@",exception);
        }
        
    }

    4、OC执行JS代码

    方法一、调用WebScriptObject的方法

    - (id)evaluateWebScript:(NSString *)script;

    方法二、调用Webview的方法

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

    5、如何调试Webview

    [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"WebKitDeveloperExtras"];
  • 相关阅读:
    从面向对象到SOA
    我对国内软件开发类书籍出版与写作的体会与努力
    MSDN for 2010的那些麻烦事
    金旭亮新作《.NET 4.0面向对象编程漫谈》之序“穿越梦想、起锚远航”
    Silverlight应用程序的本地通讯
    C#中Dictionary的用法
    泛型
    动态规划算法
    C# Timer
    面向对象程序设计寒假作业1
  • 原文地址:https://www.cnblogs.com/yongbufangqi1988/p/8463378.html
Copyright © 2011-2022 走看看