2014年3月19日 星期三

Android Webview javascript與Java 互動傳參數

重點是 要先設定

webview.setWebChromeClient(new WebChromeClient());
webview.addJavascriptInterface(new JavaScriptInterface(), "android");

於 HTML 的javascript加入

function executeFromObjCall(str)
{
    alert("execute from objective c call params:" + str);
            
}


然後在你的java檔加入

webview.loadUrl("javascript:executeFromObjCall('passValue');");


這樣就可以呼叫webview javascript檔

並由java傳值到javascript

 若要從javascript呼叫java的code的話

 我們先在javascript去呼叫某個function

如call callJavaFunction:


function callJavaFunction()
{                
   var str = window.android.callJavaMethod();
   alert(str);
}


在java code去新增

 public class JavaScriptInterface {
      public String callJavaMethod() {
           
       Log.i("info", "called from javascript execute in java");
       return "this is return params from java";
   }
}

JavaScriptInterface 是在上面有new JavaScriptInterface()的關係~ 

這樣就可以透過javascript呼叫java並回傳java的值到javascript了


2014年3月17日 星期一

UIWebview 的javascript與ios objective-c互動傳參數

UIWebview與Javascript互傳資料 可以參考此篇

我覺得寫的還不錯

 我們先來說說 Javascript 去 呼叫Objective-c 的function

 在javascript網頁建立一個HTML檔,


<!DOCTYPE html>
<html>
    <head>
        <script>
            
        function callObjFunction()
        {
        var jsParam = "paramFromJs";
        window.location  = 'js-call:runObjMethod:';
            
        }
       </script>
    </head>

    <body>
        <button onclick="callObjFunction()">call obj function</button>
    </body>
</html>
然後在我們的xcode裡objective-c 建立被呼叫的function
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString *urlString = request.URL.absoluteString;
    // 判斷點下的網址是否有js-call,更精確應該再比對切出來的字串是否有runObjMethod
    if( [urlString hasPrefix:@"js-call:"])
    {
        [self runObjMethod];
        
        return NO;
    }
    return YES;
    
}

-(void) runObjMethod
{
    NSLog(@"this is objective-c method");
}
p.s. 如果你要javascript帶傳參數到objective-c的話,就js-call:param1:param2 然後去parse出param1,param2的內容就可以~ 若要回傳參數的話(objective -> javascript) 我們先把原本的HTML的javascript 內新增
function jsFunction(str)
{
    alert("this is javascript alert! -> obj2 pass value to js show:"+str);
}

在objective-c內的runObjMethod function下加入
// 方法1
NSString *myval = @"my parameters from objective-c";
// javascript 的function 名稱 與obj變數組合成字串
    NSString  *jsMethod = [NSString stringWithFormat:@"%@%@%@", @"jsFunction('", myval, @"')"];

   [_myWebView stringByEvaluatingJavaScriptFromString:jsMethod];
// 或    
// 方法2
    [_myWebView stringByEvaluatingJavaScriptFromString: [NSString stringWithFormat:@"jsFunction('%@')",myval ]];
這樣就可以將objective-c的參數 傳到UIWebview裡面的網頁囉~