UIWebView并单击链接

时间:2013-08-27 11:35:32

标签: ios uiwebview

我知道答案很可能是非常明显的,但我在互联网上无处不在,我找不到任何东西。我使用此方法来查看用户是否按下了WebView

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

我可以向你保证它有效。

我想要做的是根据id

进行不同的操作

ES

<a id="hello" href="..."><img src="..." /></a>

一旦代理人在img上用“hello”id检测到“触摸点击”,我会做一些自定义的东西,比如[self callSomething];

你能告诉我如何使用示例代码吗?感谢

3 个答案:

答案 0 :(得分:4)

按如下方式更改您的代码

  <a id="hello" href='didTap://image><img src="..." /></a>

并在委托方法中尝试这样。

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
 {     
NSString *absoluteUrl = [[request URL] absoluteString];
 NSString*temp=[absoluteUrl stringByReplacingOccurrencesOfString:@"@" withString:@""];

if ([temp isEqualToString:@"didTap://image"])
{
    [self your method];
}
return YES;
    }

答案 1 :(得分:3)

UIWebView无法从dom元素接收id,但您可以做的一件事就是在href url中使用参数hello传递值,如:

<a id="hello" href="//myurl?id=hello"><img src="..." /></a>

你可以得到参数:

URLParser *parameter = [[URLParser alloc] initWithURLString:@"http://myurl/id=hello"];
NSString *id = [parameter valueForVariable:@"id"];

答案 2 :(得分:2)

要实现这一点,你应该将javascript onClick处理程序放到你需要的任何DOM元素上

f.e

<a onClick="callNativeSelector('doSomething');" ... > </a>

javascript function callNativeSelector(nativeSelector) { // put native selector as param
    window.location = "customAction://"+nativeSelector;
}

在UIWebView委托的方法中忽略上面的链接

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

  if ([[request.URL scheme] isEqualToString:@"customAction"]) {
        //Fetching image URL
        NSLog(@"Custom selector is %@", [request.URL host])
        ...
        // Always return NO not to allow `UIWebView` process such links
        return NO; 
    }
    ....
}

我的观点有好处:

  • <a href=...>等特定DOM元素无关,您可以将此类处理程序分配给您需要的任何内容

  • 与html id属性

  • 无关
  • UIWebView内的功能无视加载此类链接,只是执行您的customSelector