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裡面的網頁囉~

8 則留言:

匿名 提到...

請問JavaScript 帶參數傳入obj-c的部分
不太懂怎麼使用
可以+入範例嗎?
非常感謝^^

James 提到...

請問你的問題出在哪裡?或提出你問題的檔案我有時間的話可以再幫你看

匿名 提到...

寫的不錯

James 提到...

謝謝

Unknown 提到...

p.s. 如果你要javascript帶傳參數到objective-c的話,就js-call:param1:param2 然後去parse出param1,param2的內容就可以~ 若要回傳參數的話(objective -> javascript) 我們先把原本的HTML的javascript 內新增

不好意思 這一段看的很模糊 請問大大有範例嘛!?

James 提到...

解決問題了嗎?

rogerroan 提到...

hi
如果這在background有作用那就更厲害了
不過ui 在app進入 background應該都是pause狀態才對

rogerroan 提到...

所以javascript的轉址, 在background 時 webview應該無法捕捉得到 ,純屬猜測有空來玩玩