Chris
Chris

Reputation: 1013

UIWebView & ShouldStartLoadWithRequest

I have set up an app that uses a UIWebView. The UIWebView is used to display text formatted with CSS. In the text are links (a href=...). The format of the href is like this: tags.tagname

When a user clicks a link, I'd like to intercept the request and use loadHTMLString based on the contents of the HREF.

I have successfully parsed the URL, but I'm stymied on how to tell the webview to not load the requested href and load the string I want instead.

I've tried the following within ShouldStartLoadWithRequest:

genHTML=[self genTagPage:parsedString]; // a string declared earlier
[self.noteHTML loadHTMLString:genHTML baseURL:nil];
return NO;

But when the code is executed, I receive the following error:

2011-04-19 22:39:21.088 TestApp[27026:207] *** -[_PFArray release]: message sent to deallocated instance 0xaa3cf40

genHTML is getting populated with the right data, so I'm at a loss as to how to proceed.

Thanks.

Upvotes: 0

Views: 4930

Answers (1)

Sam
Sam

Reputation: 1553

It sounds like you just need to prevent the default action for the link like the following:

<a href="somewhere.html" onClick="doSomething(); return false">

Check out quirksmode for more details.

Edit: Re-read your original code, and it would seem you've got an infinite loop going on. shouldStartLoadWithRequest gets called once when they click on the link, then infinitely on your loadHTMLString line. Making the call conditional on the navigationType should fix your problem:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    if(navigationType==UIWebViewNavigationTypeLinkClicked)
    {
        genHTML=[self genTagPage:parsedString]; // a string declared earlier
        [self.noteHTML loadHTMLString:genHTML baseURL:nil];
        return NO;
    }
    return YES;
}

Upvotes: 3

Related Questions