web-dev-qa-db-fra.com

Charger du HTML local dans WebView?

Je veux charger un html local dans une WebView SANS utiliser "file: ///" car cela n'autorise pas les cookies. Existe-t-il un moyen d'utiliser quelque chose comme "localhost"?

Deuxièmement, je n'ai pas trouvé de moyen d'activer les cookies dans getSettings (). Parce que les cookies ne sont pas autorisés lors de l'utilisation de "file: ///".

40
Jash Sayani

Vous ne pouvez faire que quelque chose comme ça. Cette solution charge le HTML à partir d'une variable String:

String html = "<html><body>Hello, World!</body></html>";
String mime = "text/html";
String encoding = "utf-8";

WebView myWebView = (WebView)this.findViewById(R.id.myWebView);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.loadDataWithBaseURL(null, html, mime, encoding, null);

EDIT: essayez de définir le premier paramètre (l'URL de base) de loadDataWithBaseURL () pour vos besoins

98
user432219
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        WebView view = (WebView) findViewById(R.id.webView1);
        try {
        InputStream input = getResources().openRawResource(R.raw.lights);
        Reader is = new BufferedReader(
                new InputStreamReader(input, "windows-1252"));


            //InputStream input = getAssets().open("ws.TXT");
            int size;
            size = input.available();
            byte[] buffer = new byte[size];
            input.read(buffer);
            input.close();
            // byte buffer into a string
            javascrips = new String(buffer);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // String html = readFile(is);

        view.loadDataWithBaseURL("file:///Android_res/raw/", javascrips, "text/html",
                "UTF-8", null);
    }
14
Viren Savaliya

Essayez ce code. Ça marche pour moi.

WebView mDesc = findViewById(R.id.descWv);
WebSettings settings = mDesc.getSettings();
settings.setDefaultTextEncodingName("utf-8");
mDesc.loadData(mDescText, "text/html; charset=utf-8",null);
9
Alican Temel

Si vous souhaitez accéder à localhost via Android, vous devez utiliser http://10.0.2.2:35643/ où 35643 est le port spécifique, si nécessaire.

4
sahhhm

Le code suivant a fonctionné pour moi.

String base64EncodedString = null;
try {
    base64EncodedString = Android.util.Base64.encodeToString(
        (preString+mailContent.getBody() + postString).getBytes("UTF-8"), 
        Android.util.Base64.DEFAULT);
} catch (UnsupportedEncodingException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}
if (base64EncodedString != null)
{
    wvMailContent.loadData(base64EncodedString, "text/html; charset=utf-8", "base64");  
}
else
{
wvMailContent.loadData(preString+mailContent.getBody() + postString, "text/html; charset=utf-8", "utf-8");
0
DroidBot