2013-12-09 9 views
6

Ich habe HTML-Seite über UIWebView geladen. Wenn der Benutzer wählt Link, der wie folgt aussieht: kann href Wert IUIWebView: bekomme Attribute von Hyperlink geklickt

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

in UIWebViewDelegate Methode von NSURLRequest geklickt erhalten:

webView:shouldStartLoadWithRequest:navigationType: 

Aber wie bekomme ich Wert aus diesem Hyperlink Attribute (webview =“ ") unter der Annahme, dass der Attributname" webview "ermittelt wurde?

+0

prüfen diese ** http: //stackoverflow.com/questions/5775679/how-can-i-get-name-from-link** –

Antwort

0

Sie können Ihr Attribut "Webview" mit Hilfe von JavaScript erhalten und danach können Sie dieses Attribut und seinen Wert an nativen Objective C-Code senden.

Fügen Sie diesen JavaScript-Code in Ihre HTML-Seite innerhalb Skript-Tag:

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); 
} 

nach diesem Ihre webViewDelegate Methode aufrufen wird:

- (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

Sie müssen href Ihrer Links ändern. Zuerst injiziere Javascript Script, das deine Links patcht.

- (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]; 

} 

Verbindungen in Format konvertiert werden (man beachte & 2 in href-Attribut): <a webview="2" href="#!/accounts-cards/<%= item.acctno %>&2"></a> Dann können Sie Ihren Rückruf erhalten und Sie webview param Wert analysieren:

- (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; 
} 
Verwandte Themen