iOS - UIWebView和JavaScript互調

一、UIWebView調用JavaScript代碼

直接寫JavaScript代碼

1、只有在webView加載完畢之後在能夠調用對應頁面中的js方法。

JavaScript代碼寫在如下webView的代理方法中。

-(void)webViewDidFinishLoad:(UIWebView*)webView;//當網頁視圖結束加載一個請求之後,得到通知。 

2、與UIWebView進行交互,調用web頁面中的需要傳參的函數時,參數需要帶單引號,或者雙引號(雙引號需要進行轉義在轉義字符前加\),在傳遞json字符串時不需要加單引號或雙引號:

-(void)webViewDidFinishLoad:(UIWebView *)webView {

NSString *sendJsStr=[NSString stringWithFormat:@"openFile(\"%@\")",jsDocPathStr];
[webView stringByEvaluatingJavaScriptFromString:sendJsStr];
}

3、調用JavaScript函數只能在函數寫完後調用,不能使用window.onload = ‘function()’,不能在頁面加載的時候調用。

demo如下:

 - (void)webViewDidFinishLoad:(UIWebView *)webView {
    // 設置p標籤字體顏色
    [webView stringByEvaluatingJavaScriptFromString:@"var script = document.createElement('script');"
     "script.type = 'text/javascript';"
     "script.text = \"function SetParaColor() {"
     "var i = 0;"
     "var allP = document.getElementsByTagName('p');"
     "for (i; i < allP.length; i++) {"
     "var p = allP[i];"
     "p.style.color = '#333';"
     "}"
     "}\";"
     "document.getElementsByTagName('head')[0].appendChild(script);"
     ];

    [webView stringByEvaluatingJavaScriptFromString:@"SetParaColor();"];
}

引入JavaScript文件

1、寫個test.js放到項目中

2、引入test.js文件到html中

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"js"];  
NSString *jsString = [[NSString alloc] initWithContentsOfFile:filePath];  
[webView stringByEvaluatingJavaScriptFromString:jsString]; 

3、觸發test.js中的函數

二、UIWebView調用JavaScript代碼

1、在html裏面寫重定向請求

在JavaScript寫上:

href = "$://......."

2、在以下代理方法中截獲html裏面的重定向請求

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

    NSString *str = [request.URL absoluteString];
    if ([str hasPrefix:@"http"]) {
        NSString *url = [Utils URLDecodedString:str];
        NSArray *params = [url componentsSeparatedByString:@"?"];
        if (params.count > 0) {
            if (params.count >=2 ) {
                NSArray *value = [params[1] componentsSeparatedByString:@"="];
                if ([value[0] isEqualToString:@"name"]) {
                    [HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"$" delegate:self.contentView.viewController titleStr:@""];
                }else if ([value[0] isEqualToString:@"topicId"]) {
                    [HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"#" delegate:self.contentView.viewController titleStr:@""];
                }else if ([value[0] isEqualToString:@"clientId"]) {
                    [HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"#_" delegate:self.contentView.viewController titleStr:@""];
                }else if ([value[0] isEqualToString:@"fid"]) {
                    [HyperlinkClickManager hyperlinkClickWithParam:value[1] type:@"@" delegate:self.contentView.viewController titleStr:@""];
                }else {
                    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
                }
            }else {
                [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
            }

        }else {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
        }
        return NO;
    }
    return YES;
}
發佈了116 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章