2017-09-05 9 views
1

私はViewControllerにWkWebViewを持っています。私はwebview load local htmlを使っていました。コードは次のとおりです。WebViewはローカルイメージをhtmlに挿入できませんでしたか?

guard let path = Bundle.main.url(forResource: "editor", withExtension: "html") else { 
     return 
    } 
webView.load(URLRequest(url: path)) 

1:私はphotoLibraryから画像を選択してから、文書のディレクトリに保存しました。

private func fileName() -> String { 
    let date = Date() 
    let formatter = DateFormatter() 
    formatter.dateFormat = "[email protected]" 
    return "/" + formatter.string(from: date) + ".png" 
} 

func saveImage(_ image: UIImage) { 
    guard let imageData = UIImageJPEGRepresentation(image, 1.0) else { 
     return 
    } 
    let directory = NSHomeDirectory().appending("/Documents") 
    let path = directory.appending(fileName()) 
    let fileManager = FileManager.default 
    do { 
     try fileManager.createDirectory(atPath: directory, withIntermediateDirectories: true, attributes: nil) 
     fileManager.createFile(atPath: path, contents: imageData, attributes: nil) 
    } catch { 
     SHLog("saveImage: \(error)") 
    } 
} 

2:画像パスを取得した後、webViewのメソッドを使用して画像を挿入しました。

func evaluateJs(_ imagePath: String) { 
    webView.evaluateJavaScript("insertImage('\(imagePath)')") { (response, error) in 
    } 
} 

insertImage()は、ローカルのjsファイルからのメソッドで、イメージをhtmlに挿入できます。

ローカルのimagePathを使用した場合、イメージをhtmlに挿入できませんでした。しかし、私が実際のURLを使用したとき、それは動作することができます。私は理由を知らない、誰も私を助けることができます。ありがとう。

+0

こんにちは、@ジャックロング、あなたはそれを理解しましたか?私は同じ問題があります。 Thx〜 – Jerome

+0

同じフォルダの下にhtmlファイルと画像を保管すれば、この問題は解決します。ここをクリック[link](http://blog.csdn.net/longshihua/article/details/78008594) –

答えて

0

あなたの問題は、アプリケーションのローカルフォルダへのアクセスを許可しないWKWebViewsセキュリティポリシーが原因である可能性があります。

WKWebView loadFileURLのドキュメントをご覧ください。 allowingReadAccessToパラメータにドキュメントディレクトリまたは完全なイメージURLを渡すことができます。これにより、必要なイメージにアクセスできるようになります。

イメージのWeb URLがある場合は、イメージをローカルに格納して読み込むのではなく、Web URLを使用することをお勧めします。ドキュメントディレクトリとWKWebViewでストレージを使い切っていないと、Webからコンテンツを読み込むように設計されています。

+0

ありがとうございます。私はwebViewを使用してローカルHTMLを読み込む関数を持っています。これは、テキストと画像を入力できるリッチテキストエディタです。だから私はhtmlに画像を挿入する必要があります。あなたが言及したように、私はloadFileURLメソッドを使用しましたが、それはまだ動作しませんでした。私はまた、いくつかの回答リンクを発見したが、それは私の問題を解決できませんでした。 –

0

私の場合は、まず画像ファイルの親フォルダにbaseURLを割り当てます。次に、あなたのhtmlの好きな場所にURLのパス全体を挿入します。

<img src="/var/mobile/Containers/Data/Application/C217F3BD-1A1B-438A-A436-D878411C7849/Documents/48C4B007-A950-46D2-A719-E025482710A0/images/79042B1F-E11C-42D1-8B49-DD3A0016F421.jpg" 
+0

あなたは正しいです、同じフォルダにhtmlファイルと画像を保管してください。 –

+0

@Jack Long、実際、私のHTMLファイルと画像ファイルは別のフォルダにあります。 – Jerome

+0

私は、htmlファイルと画像ファイルがbaseURLの下にあることを意味します。 htmlファイルとイメージファイルが別のフォルダにある場合でも。大丈夫でしょう。 –

関連する問題