如何在 WebView 中仅加载 .html 页面并在 iOS 的 Safari 中加载所有 www 页面?
Posted
技术标签:
【中文标题】如何在 WebView 中仅加载 .html 页面并在 iOS 的 Safari 中加载所有 www 页面?【英文标题】:How to Load Only .html page in WebView and All www Page load in Safari in iOS? 【发布时间】:2015-01-20 08:01:13 【问题描述】:我是 ios 开发的新手,我将我的 html 数据加载到 WebView 但有时它仅包含 href 链接为 .html 链接,有时包含网站链接,如 www.google.co.in
所以我只想将 html 数据加载到 Webview 和任何网站都加载到 Safari 中,因为我编写了类似 as 的代码
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSString *link = [[request URL] relativeString];
if ([link isEqualToString:@"module1learningobjectives.html"])
return NO;
else
[[UIApplication sharedApplication] openURL:[request URL]];
return YES;
return YES;
然后它在 web 视图中加载 .html 文件,但网站在 safari 和 Webview 中打开,我只希望网站在 safari 中打开,请给我解决方案。
【问题讨论】:
【参考方案1】:我会这样做:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSLog("URL is %@, and has an extension of %@", request.URL, [request.URL pathExtension]);
if ([[request.URL pathExtension] isEqualToString:@".html"])
return YES;
return NO;
这是你要问的吗?
如果您希望它对非文件使用 Safari,对文件使用您自己的 WebView,请尝试以下操作:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
if ( ! ([request.URL isFileURL]) )
[[UIApplication sharedApplication] openURL:[request URL]];
return NO;
return YES;
【讨论】:
一些细节怎么样?什么是 request.url?它是否以“.html”结尾? @web 视图中没有加载 html 文件。 现在我在我的问题中编写了一个代码编辑,当我点击网站 url 然后它在 safari 和 web 视图中打开但我希望它只在 safari 和我的新代码中打开我的 html 页面工作正常.only 网站在 web 视图和 safari 中都打开我只想在 safari 而不是 web 视图中打开请给我解决方案。 很高兴我们知道了。 我的一个问题是,如果我想在包含 .mp3 文件的 href 链接上播放 mp3 文件,有可能吗?【参考方案2】:只需将您的代码修改为以下代码即可。
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
if (navigationType == UIWebViewNavigationTypeLinkClicked)
NSString *strLink=request.URL.absoluteString;
if([strLink rangeOfString:@".html"].location!=NSNotFound)
[[UIApplication sharedApplication]openURL:[request URL]];
return NO;
else
return TRUE;
return NO;
return YES;
上面的代码检查要打开的链接是否有.html扩展名?它会相应地工作。
在您的问题中,您还没有提到 href 是本地页面的链接或外部链接的链接。
【讨论】:
.html href 链接是本地页面 那么我建议搜索 http:// 协议。因此,如果链接以 http:// 开头,则打开 safari,否则在 web 视图中加载。【参考方案3】:-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
NSURL *url = request.URL;
NSString * temp = [NSString stringWithFormat:@"%@",url];
if ([temp rangeOfString:@"www"].location != NSNotFound)
// show alert view for go to safari
// i.e
[[UIApplication sharedApplication] openURL:url];
else
// your regular html page pushed
【讨论】:
这很脆弱。像 mywwwserverfile.html 这样的本地 URL 会触发 if 语句。 是的,你是对的。然后,您必须在应用程序页面 safari 简单 中设置一些带有 herf 链接的前缀世界,并更改 if 条件 if ([temp rangeOfString:@" SafariLink_"].location == 0)以上是关于如何在 WebView 中仅加载 .html 页面并在 iOS 的 Safari 中加载所有 www 页面?的主要内容,如果未能解决你的问题,请参考以下文章
android中webview加载html,用本地的css渲染页面如何做