如何快速获取当前超连接的target属性?我想获取当前被点击的超连接的target属性 现在的处理方法如下:
// 判断是否带_blank标记超连接
-(BOOL) isBlankLink:(UIWebView*) webView HttpRequest:(NSURLRequest*) request
{
    if(webView == nil || request == nil)
    {
        return NO;
    }
    
    NSURL* URL = [request URL];
    NSString* URLString = [URL absoluteString];
    
    
    //NSLog(@"对比当前连接是否带有_blank标记");
    //NSLog(@"--------------------------------当前源网址:%@", URLString);
    
    int aLen = [[webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName(\"a\").length"] intValue];
    for (int n = 0; n < aLen; n ++)
    {
        // 获取href js脚本串
        NSString* html = [NSString stringWithFormat:@"document.getElementsByTagName(\"a\")[%d].href", n];
        
        // 获取href 
        NSString* href = [webView stringByEvaluatingJavaScriptFromString:html];
        // NSLog(@"索号:%d 网址:%@", n,href);
        
        if ([URLString isEqualToString:href])
        {
            //NSLog(@"------------------------找到与当前连接相同网址, 开始测试是否带 _blank标记-------------------------");
            html = [NSString stringWithFormat:@"document.getElementsByTagName(\"a\")[%d].target", n];
            NSString* target = [webView stringByEvaluatingJavaScriptFromString:html];
            
            if([target isEqualToString:@"_blank"])
            {
                // NSLog(@"----------------------------------------------找到_blank标记 返回 yes");
                
                return YES;
            }
            else
            {
                // NSLog(@"-----------------------------------------------没有找到_blank标记");
                break;
            }
        }
    }
    
    return NO;
}
这种依次跟超连接集合中元素比较的方法很慢。。影响打开网页 谁能提供一个更正确的方法  让我获取target 的属性?

解决方案 »

  1.   

    stringByEvaluatingJavaScriptFromString很耗时间的,你这样过于频繁的调用当然慢啦。以下是我们用来解决UIWebview不能打开'_blank'链接的方法,你参考下吧。
    虽然JS我不懂,但我想以下的代码你稍作修改就可以用了。
     (void)webViewDidFinishLoad:(UIWebView *)webView {
            NSString *js = @"\
            var d = document.getElementsByTagName('a');\
            for (var i = 0; i < d.length; i++) {\
                if (d[i].getAttribute('target') == '_blank') {\
                    d[i].removeAttribute('target');\
                }\
            }\
            ";        [webView stringByEvaluatingJavaScriptFromString:js];
    }