티스토리 뷰

반응형

Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.

Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.

 

아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.

Loading existing .html file with android WebView

안드로이드 WebView에서 기존 .html 파일을 로드하는 방법

 문제 내용 

I did try samples, demos from Google codes and other resources with WebView, but when i try to do it in my own code, it doesn't work for me.

WebView에 대한 Google 코드 및 기타 리소스에서 샘플 및 데모를 시도해 보았지만, 제 코드에서 시도하면 작동하지 않습니다.

 

I want to load myfile.html which i put in assets folder, and using:

내가 assets 폴더에 넣은 myfile.html을 로드하려고하고 다음을 사용합니다:
private WebView myWebView;

myWebView.loadUrl("file:///android_assets/myfile.html");

 

On emulator shows error

에뮬레이터에서 오류 표시

 

The web page at file:///android_assets/myfile.html could not be loaded as: The requested file was not found. /android_assets/myfile.html

file : ///android_assets/myfile.html의 웹 페이지는 다음과 같이 로드 할 수 없습니다. 요청한 /android_assets/myfile.html 파일을 찾을 수 없습니다. 

 

When i put that file to res/raw/ folder and using:

그 파일을 res / raw / 폴더에 넣고 다음을 사용하면:
myWebView.loadUrl("file:///android_res/raw/myfile.html");

 

then only emulator android 2.2 API level 8 can load the file probably, other older versions show the same error. Am i missing something?

그러면 emulator android 2.2 API 레벨 8에서만 파일을로드 할 수 있으며 다른 구버전에서는 동일한 오류가 표시됩니다. 놓친 것이 있나요?

 

Is there any way of loading an existing .html file in the application package which works on all API versions ?

모든 API 버전에서 작동하는 응용 프로그램 패키지 내의 기존 .html 파일을로드하는 방법이 있습니까?

 

 

 

 높은 점수를 받은 Solution 

ok, that was my very stupid mistake. I post the answer here just in case someone has the same problem.

여기서는 매우 어리석은 실수를했습니다. 나는 단지 누군가가 같은 문제를 가지고있을 수 있기 때문에 여기에 답변을 게시합니다.

 

The correct path for files stored in assets folder is file:///android_asset/* (with no "s" for assets folder which i was always thinking it must have a "s").

assets 폴더에 저장된 파일의 올바른 경로는 file : ///android_asset/*입니다 (나는 항상 "s"가 있어야한다고 생각했지만, assets 폴더에는 "s"가 없어야합니다).

 

And, mWebView.loadUrl("file:///android_asset/myfile.html"); works under all API levels.

그리고 mWebView.loadUrl("file : ///android_asset/myfile.html")은 모든 API 수준에서 작동합니다.

 

I still not figure out why mWebView.loadUrl("file:///android_res/raw/myfile.html"); works only on API level 8. But it doesn't matter now.

mWebView.loadUrl("file : ///android_res/raw/myfile.html")이 API 레벨 8에서만 작동하는 이유를 아직 이해하지 못했습니다. 하지만 이제는 상관없습니다.

 

 

 

 가장 최근 달린 Solution 

If your structure should be like this:

구조가 이와 같이되어 있으면

/assets/html/index.html

/assets/scripts/index.js

/assets/css/index.css

 

Then just do ( Android WebView: handling orientation changes )

다음을 수행하십시오 (안드로이드 WebView : 회전 변경 처리)
    if(WebViewStateHolder.INSTANCE.getBundle() == null) { //this works only on single instance of webview, use a map with TAG if you need more
        webView.loadUrl("file:///android_asset/html/index.html");
    } else {
        webView.restoreState(WebViewStateHolder.INSTANCE.getBundle());
    }

 

Make sure you add

확실히 추가하십시오
    WebSettings webSettings = webView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        webSettings.setAllowFileAccessFromFileURLs(true);
        webSettings.setAllowUniversalAccessFromFileURLs(true);
    }

 

Then just use urls

그런 다음 URL을 사용하십시오.
<html>
<head>
    <meta charset="utf-8">
    <title>Zzzz</title>
    <script src="../scripts/index.js"></script>
    <link rel="stylesheet" type="text/css" href="../css/index.css">

 

 

출처 : https://stackoverflow.com/questions/4027701/loading-existing-html-file-with-android-webview

반응형
댓글
공지사항
최근에 올라온 글