2013-12-09 6 views
6

Mam stronę html załadowaną przez UIWebView. Jeśli użytkownik wybierze link, który wygląda tak:UIWebView: pobierz atrybuty z hiperłącza klikniętego

<a webview="2" href="#!/accounts-cards/<%= item.acctno %>"></a> 

mogę uzyskać wartość href kliknięciu w metodzie UIWebViewDelegate z NSURLRequest:

webView:shouldStartLoadWithRequest:navigationType: 

Ale jak mogę uzyskać wartość atrybutu z tego linku (Webview =” ") przy założeniu, że nazwa atrybutu" webview "została ustalona?

+0

Sprawdź to ** http: //stackoverflow.com/questions/5775679/how-can-i-get-name-from-link** –

Odpowiedz

0

Możesz uzyskać atrybut "webview" za pomocą JavaScript, a następnie możesz wysłać ten atrybut i jego wartość do natywnego kodu C celu.

Dodaj kod JavaScript do strony HTML wewnątrz tagu skryptu:

function reportBackToObjectiveC(string) 
{ 
    var iframe = document.createElement("iframe"); 
    iframe.setAttribute("src", "callback://" + string); 
    document.documentElement.appendChild(iframe); 
    iframe.parentNode.removeChild(iframe); 
    iframe = null; 
} 

var links = document.getElementsByTagName("a"); 
for (var i=0; i<links.length; i++) { 
links[i].addEventListener("click", function() { 
var attributeValue=links[i].webview; //this will give you your attribute(webview) value. 
    reportBackToObjectiveC(attributeValue); 
}, true); 
} 

po tym metodę webViewDelegate wezwie:

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

{ 
    if (navigationType == UIWebViewNavigationTypeLinkClicked) 
    { 
     NSURL *URL = [request URL]; 
     if ([[URL scheme] isEqualToString:@"callback"]) 
     { 
      //You can get here your attribute's value. 
     } 
} 
0

Musisz zmienić href swojego łącza. Najpierw wstrzyknij skrypt javascript, który poprawi twoje linki.

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

    NSString *js = @"var allElements = document.getElementsByTagName('a');" 
        "for (var i = 0; i < allElements.length; i++) {" 
        " attribute = allElements[i].getAttribute('webview');" 
        " if (attribute) {" 
        "  allElements[i].href = allElements[i].href + '&' + attribute;" 
        " }" 
        "}"; 
    [webView stringByEvaluatingJavaScriptFromString:js]; 

} 

Linki zostaną przekonwertowane na format (zauważ & 2 w atrybucie href): <a webview="2" href="#!/accounts-cards/<%= item.acctno %>&2"></a> Następnie można uzyskać zwrotnego i analizowania Ci Webview wartości param:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    NSArray *array = [request.URL.absoluteString componentsSeparatedByString:@"&"]; 
    if (array.count > 2) { 
     NSLog(@"webview value = %@", array[1]); 
    } 
    return YES; 
} 
Powiązane problemy