1. ホーム
  2. ios

[解決済み] uiwebviewでローカルのhtmlを使用して相対パスからリソースをロードする

2022-08-08 18:23:07

質問

非常にシンプルなテストページ(test.html)を読み込むuiwebviewを持つ、非常にシンプルなiOSアプリがあります。

<html>
<body>
<img src="img/myimage.png" />
</body>
</html>

このtest.htmlファイルをWebビューに読み込んでいます。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"test" withExtension:@"html"];
NSString *html = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];
NSURL *baseUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]];
[webView loadHTMLString:html baseURL:baseUrl];

これは、相対パスなしで画像を参照し、XCode内のTargets -> Copy Bundle Resourcesのルートパスに参照画像を置くとうまくいきますが、私のhtmlファイルに示されているように相対パスで動作させることができません。 私はウェブビューにロードしたい画像、CSS、JavaScriptファイルがたくさんあり、ルートにすべてを持つ必要はなく、私のウェブアプリですべての参照を変更する必要がないようにしたいのですが、これを行う方法があるはずです。

どのように解決するのですか?

ローカルのhtmlを相対参照で読み込んで使用する方法です。

  1. リソースをxcodeプロジェクトにドラッグします(私はファインダーウィンドウからwwwという名前のフォルダをドラッグしました)。
  2. フォルダ参照を作成する..."オプションを選択します。
  3. 以下のコードを使用してください。それは魅力のように動作するはずです。

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www"]];
    [webview loadRequest:[NSURLRequest requestWithURL:url]];

これで、すべての相対リンク(例えばimg/ .gif、js/ .jsのような)相対リンクはすべて解決されるはずです。

スウィフト 3

    if let path = Bundle.main.path(forResource: "dados", ofType: "html", inDirectory: "root") {
        webView.load( URLRequest(url: URL(fileURLWithPath: path)) )
    }