gpt4 book ai didi

html - UIWebView 忽略内联 anchor /链接

转载 作者:搜寻专家 更新时间:2023-10-31 23:01:49 26 4
gpt4 key购买 nike

我正在使用 UIWebView使用 webView.loadHTMLString(self.htmlContent, baseURL: nil) 从数据库字符串加载 HTML

htmlContent包含以下内容:

<ul class="anchorNavigation">
<li>
<a href="#parsys_47728" class="">1. Inline Test Link</a>
</li>
<li>
<a href="#parsys_00061" class="">2. Inline Test Link</a>
</li>
...
</ul>

...以及稍后在 HTML 中:

...
<a href="#" name="parsys_00061"></a>
...

但是,每当我单击 webView 中的内联链接时没有任何反应。

到目前为止我尝试了什么:

  • 将 anchor 标记更改为“真正的”有效 W3C HTML。例如。 <a id='parsys_47728'>Test</a>
  • 将 HTML 保存到临时目录中的文件并使用 loadRequest() 加载它.例如。 let path = tempDirectory.URLByAppendingPathComponent("content.html")webView.loadRequest(NSURLRequest(URL: path))
  • 拦截loadRequest通过实现 func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool 的方法代表。 request.URL说一些奇怪的东西,比如:"applewebdata://1D9D74C2-BBB4-422F-97A7-554BCCD0055A#parsys_47728"

我不知道如何实现这一点。我从以前的项目中了解到, bundle 中的本地 HTML 文件可以使用内联链接。我只是想不通为什么这不起作用。

非常感谢帮助!谢谢!

最佳答案

如果有片段(例如,#anchorName),则使用 JavaScript 进行滚动。否则,假设它是一个没有片段的链接并使用 openURL。

// UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if (navigationType == UIWebViewNavigationTypeLinkClicked ) {
// NSLog(@"request.URL %@",request.URL); // e.g., file:///.../myApp.app/#anchorName
NSString *anchorName = request.URL.fragment; // e,g, "anchorName"
if ( anchorName ) {
[webView stringByEvaluatingJavaScriptFromString:[NSString swf:@"window.location.hash='%@';",anchorName]];
return NO;

} else { // assume http://
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
}
}
return YES;
}

我仍在寻找一种让滚动位置平滑(动画)变化而不是跳跃的方法。

关于html - UIWebView 忽略内联 anchor /链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32829745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com