【问题标题】:baseURL not working for UIWebView?baseURL 不适用于 UIWebView?
【发布时间】:2013-09-07 09:23:12
【问题描述】:

我目前正在创建一个 UIWebView,我在其中加载从我的服务器服务获取的 NSString。它只是一个简单的 HTML 字符串,然后我将它加载到 UIWebView 中,如下所示:

urlAddress = [[NSURL alloc] initWithString:URLString];

//try removing cache so new stylesheet shows everytime- not sure if this is working yet
[[NSURLCache sharedURLCache] removeAllCachedResponses];


[InfoWebview loadHTMLString:returnedHtmlString baseURL:urlAddress];

然后由于某种原因,图像没有显示,样式表也不起作用。

例如,我的 baseURL 看起来像这样

https://myserveraddress/

然后CSS的代码看起来像这样

<link rel="stylesheet" type="text/css" href="Data/iPhone/my.css">

我的问题是这样的 baseURL 如何在该 href 上添加前缀?它要求css作为loadHTMLString加载到WebView上吗?或不同的东西

如何将 infoWebView 源输出到 NSString?看看 baseURL 是否在这些 href 链接上添加了前缀?还是现在就这样工作?

任何帮助将不胜感激。

【问题讨论】:

  • Stackoverflow 不是那种询问事情如何运作的网站,它是一个关于为什么事情不起作用的网站。如果您对 baseURL 的工作原理感到好奇,请尝试查看 Apple 的文档。
  • 哎呀..对不起。我看过苹果文档..它并没有涵盖很多关于 baseURL 的内容
  • @JosueEspinosa 我已经用我遇到的实际问题更新了我的问题。这更符合标准。

标签: ios objective-c uiwebview nsstring base-url


【解决方案1】:

baseURL 是如何工作的?

以下是 AFNetworking 文档中的一些有用示例:

NSURL *baseURL = [NSURL URLWithString:@"http://example.com/v1/"];
[NSURL URLWithString:@"foo" relativeToURL:baseURL];                  // http://example.com/v1/foo
[NSURL URLWithString:@"foo?bar=baz" relativeToURL:baseURL];          // http://example.com/v1/foo?bar=baz
[NSURL URLWithString:@"/foo" relativeToURL:baseURL];                 // http://example.com/foo
[NSURL URLWithString:@"foo/" relativeToURL:baseURL];                 // http://example.com/v1/foo
[NSURL URLWithString:@"/foo/" relativeToURL:baseURL];                // http://example.com/foo/
[NSURL URLWithString:@"http://example2.com/" relativeToURL:baseURL]; // http://example2.com/

基本上,您的 HTML 中的任何文件都将假定位于基本 URL 中指定的位置。如果 HTML 指定文件以 / 开头,则域名将保持不变,但基本 URL 的路径将被忽略。如果 HTML 指定文件以 http(s):// 开头,则整个 Base URL 将被忽略。

在您的示例中,URL 将解析为 https://myserveraddress/Data/iPhone/my.css

如何将infoWebView 源输出到 NSString?

一个简单的解决方案是:

NSString *html = [InfoWebview stringByEvaluatingJavaScriptFromString: 
                                         @"document.body.innerHTML"];

on Stack Overflow here 提供有关此主题的更多信息和讨论。

【讨论】:

  • 请注意,loadHTMLString: baseURL: 方法不会修改您的 HTML 以包含基本 URL;它只会在您的 HTML 请求资源时使用它。
猜你喜欢
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2017-11-24
  • 2013-06-23
  • 1970-01-01
  • 2017-08-02
  • 2012-06-29
  • 1970-01-01
相关资源
最近更新 更多