【问题标题】:UIWebView & ShouldStartLoadWithRequestUIWebView & ShouldStartLoadWithRequest
【发布时间】:2011-04-20 02:55:33
【问题描述】:

我设置了一个使用 UIWebView 的应用程序。 UIWebView 用于显示用 CSS 格式化的文本。文本中有链接(a href=...)。 href的格式是这样的:tags.tagname

当用户点击链接时,我想拦截请求并根据 HREF 的内容使用 loadHTMLString。

我已经成功解析了 URL,但是我不知道如何告诉 webview 不加载请求的 href 而是加载我想要的字符串。

我在 ShouldStartLoadWithRequest 中尝试了以下内容:

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

但是当代码执行时,我收到以下错误:

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

genHTML 正在填充正确的数据,所以我不知道如何继续。

谢谢。

【问题讨论】:

    标签: cocoa-touch uiwebview nsurlrequest


    【解决方案1】:

    听起来您只需要阻止链接的默认操作,如下所示:

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

    查看quirksmode了解更多详情。

    编辑: 重新阅读您的原始代码,您似乎正在进行一个无限循环。 shouldStartLoadWithRequest 在他们点击链接时被调用一次,然后在你的 loadHTMLString 行上无限次调用。以 navigationType 为条件调用应该可以解决您的问题:

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

    【讨论】:

    • 不.. 我需要点击发生,并让 IOS 触发一个事件。这样,我知道链接已被点击,然后我可以解析出链接要求的内容并计算和呈现请求的信息。我只是不想加载原始链接——它不会——那里什么都没有。它是真正需要的描述符。
    • @Chris 检查我的更新答案,我认为这应该可以解决您的问题。
    • 谢谢!我无法弄清楚如何正确处理导航类型,这个例子帮助我解决了我所处的无限循环。
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多