我正在使用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
中的内联链接时,都不会发生任何事情。
<a id='parsys_47728'>Test</a>
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” 我不知道如何实现这一目标。我从以前的项目中知道,捆绑包中的本地HTML文件使用内联链接。我只是想不通为什么这不起作用。
非常感谢!谢谢!
答案 0 :(得分:1)
如果有片段(例如#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;
}
我还在寻找一种方法让滚动位置平滑(动画)而不是跳跃。