首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >UIWebView shouldStartLoadWithRequest只打了一次电话?

UIWebView shouldStartLoadWithRequest只打了一次电话?
EN

Stack Overflow用户
提问于 2009-12-03 22:48:35
回答 8查看 15.9K关注 0票数 16

在我的iPhone应用程序中,我有一个加载本地html的UIWebView。一切正常,但现在我希望能够处理本地链接(到脚注):当我单击本地链接时,我希望能够跳转到它引用的脚注,然后能够返回。

代码语言:javascript
复制
<a href="#tofootnote">jump to footnote</a>

我通过将代码添加到shouldStartLoadWithRequest并拦截本地链接点击来处理此问题;当单击本地链接时,我会施展我的魔力(隐藏一些ui元素,添加back按钮等);单击back按钮将跳回到html文档中的原始位置。

问题是再次点击链接不再调用shouldStartLoadWithRequest。即下面的代码:

代码语言:javascript
复制
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
 NSLog(@"foo bar");
 return YES;
}

只显示"foo bar“一次(实际上是两次-第一次加载文档时),但之后只显示一次,无论我点击了多少次本地链接

因此,除非有人有更好的解释,否则我猜测UIWebView缓存了文档或链接或其他东西,并且在初始调用后不再调用处理程序;如果是这种情况,我如何清除这个内部缓存?(无需重新加载文档)

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-07-17 21:28:37

对于这个问题,我找到的唯一解决方案就是用字符串将所有的锚点从“#锚”替换成一个URL,比如“|锚”。这样,UIWebView会认为这是一个真正的链接,并在点击时尝试请求。显然,这个解决方案只有在你自己处理所有点击的情况下才有效,因此可以解释更改后的锚点。我可以理解UIWebView行为的原因,但这相当令人沮丧。代理确实需要与onclick等处理程序匹配的消息。

票数 14
EN

Stack Overflow用户

发布于 2012-11-01 06:47:45

我可以通过在处理有效锚点后将window.location设置为虚拟锚点来解决此问题。

代码语言:javascript
复制
- (BOOL)webView:(UIWebView *)aWebView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if ([[request URL] fragment]) {
        if ([[[request URL] fragment] isEqualToString:@"__DUMMY_ANCHOR"])
            return NO;

        // Do your custom handling of the anchor here

        // Change the location to a non-existent anchor
        [aWebView stringByEvaluatingJavaScriptFromString:@"window.location='#__DUMMY_ANCHOR'"];

        return NO;
    }
}
票数 6
EN

Stack Overflow用户

发布于 2012-06-21 22:53:46

当我在使用jquery移动嵌入式页面更改时遇到这个问题时,我发现的一个技巧是在散列中添加一个随机数。这样,iOS似乎认为这是一个新的请求:

代码语言:javascript
复制
//set location hash to path
set: function( path ) {
    path += "&" + Math.random();
    location.hash = path;
},

这也可以通过onclick事件动态设置路径来实现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1840355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档