2010-11-08 18 views

回答

8

您可以通過使用自定義協議來實現。在你的html文件中,你可以鏈接到類似myProtocol://callSomeAction的東西。

然後在您的UIWebViewDelegate(可能是你UIViewController),你必須實現調用的方法:

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

(文檔here

的想法是,該代碼,您檢測根據協議request參數中的數據。如果是myProtocol,則可以撥打IBAction並返回NO。如果是其他內容,則可以使用Web視圖加載頁面,然後返回YES

的代碼會是這個樣子:

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

    NSString* scheme = [[request URL] scheme]; 
    if ([@"myProtocol" isEqual:scheme]) { 
     // Call your method 
     return NO; 
    } else { 
     return YES; 
    } 
} 
+0

你可以告訴我這是怎麼完成的。因爲我無法弄清楚。謝謝。 – StefanHanotin 2010-11-08 14:50:46

+0

只需添加一些示例代碼。希望對你有效。 – pgb 2010-11-08 15:15:56

+0

你我的朋友是英雄!太感謝了! – StefanHanotin 2010-11-08 15:25:27

3
  1. 讓HTML頁面上的按鈕打開自定義網址,如myapp://buttonclick

  2. 在Web視圖的委託,實施webView:shouldStartLoadWithRequest:navigationType:。檢查請求是否包含您的自定義URL,如果有,請調用您想要的任何Obj-C方法。

+0

你能也許告訴我我哪裏錯了?我已經嘗試了以上,但它似乎並沒有工作。這是我的HTML。 這是我的目標C。 - (BOOL)web視圖:(的UIWebView *)webView的shouldStartLoadWithRequest:(的NSURLRequest *)請求navigationType:(UIWebViewNavigationType)navigationType { \t如果(navigationType == UIWebViewNavigationTypeLinkClicked){ \t \t [自VIDEO1]; \t \t return NO; \t} \t \t 返回YES; } – StefanHanotin 2010-11-08 14:25:52

0

我也有類似的這種情況,但它的imageclick,href和處理的WebView的這種方法,

- (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary *)actionInformation request:(NSURLRequest *)request frame:(WebFrame *)frame decisionListener:(id <WebPolicyDecisionListener>)listener{ 

    NSString *host = [[request URL] host]; 
    //if (host!=nil) 
    { 




    WebNavigationType eActionType = (WebNavigationType)[[actionInformation valueForKey:WebActionNavigationTypeKey] intValue]; 
    NSURL *pOrignalURL; 
    if(eActionType == WebNavigationTypeLinkClicked)// == [actionInformation valueForKey:WebActionNavigationTypeKey]) 
    { 
     /* we will handle it */ 
     pOrignalURL = [actionInformation valueForKey:WebActionOriginalURLKey]; 
     NSString *pElementName = [actionInformation valueForKey:WebActionElementKey]; 

     if([[pOrignalURL absoluteString] hasPrefix:@"app:"]){ 

      [listener ignore]; 
      return; 
     } 
    } 
    //[[NSWorkspace sharedWorkspace] openURL:pOrignalURL]; 
    NSArray* urls = [ NSArray arrayWithObject: 
        [ NSURL URLWithString:[pOrignalURL absoluteString]]]; 

    [[ NSWorkspace sharedWorkspace ] 
    openURLs:urls 
    withAppBundleIdentifier:nil 
    /* use default system bindings */ 
    options:NSWorkspaceLaunchWithoutActivation 
    additionalEventParamDescriptor:nil 
    launchIdentifiers:nil ]; 


    /* default behavior */ 
[listener download]; 




    return; 
    } 
} 
相關問題