WebView refuse de sauvegarder certaines données de navigations

  • Réponses :0
  • OuverteNon stickyNon répondu
  • Posts de Forum 1

27 oct. 2016 08:29:15 via site

Bonjour à tous,

Je rencontre un petit souci avec l'utilisation de WebView. Sur un site en particulier (intranet professionnel), le webview exécuté sur Android "refuse" d'enregistrer les données de navigation (login, password, configuration utilisateur, ...). Je précise "exécuté sur Android" car à l'origine j'ai fait face à ce souci en travaillant sur un projet OSX/Android (pas iOS hein ;)) écrit en Qt/QML. Le même code permettant une compilation sur les deux OS j'ai pu la tester donc sur mon mac et je ne rencontre aucun souci.

Rentrons dans le vif du sujet :

Mon application, enfin la partie webview, est très simple et ne consiste (pour le moment) qu'à la simple déclaration du composant. Coté autorisation, j'ai fait plusieurs tests, jusqu'à tout autoriser !!! Voici ce que cela donne pour le moment :

Le fichier activity_main.xml

<RelativeLayout xmlns:android=.... // comme je suis nouveau, j'ai pas le droit au lien externe :(
xmlns:tools=.... // comme je suis nouveau, j'ai pas le droit au lien externe :(
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">


    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/editText"
        android:hint="Enter Text"
        android:focusable="true"
        android:textColorHighlight="#ff7eff15"
        android:textColorHint="#ffff25e6"
        android:layout_marginTop="46dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Enter"
        android:id="@+id/button"
        android:layout_below="@+id/editText" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Accès direct"
        android:id="@+id/button2"
        android:layout_alignTop="@+id/button"
        android:layout_toRightOf="@+id/button"
        android:layout_toEndOf="@+id/button" />

    <WebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/webView"
        android:layout_below="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true" />

</RelativeLayout>

Le fichier MainActivity.java

package com.example.charlie.myapplication;

import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;


public class MainActivity extends Activity  {
    Button b1;
    Button b2;
    EditText ed1;

    private WebView wv1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        b1=(Button)findViewById(R.id.button);
        b2=(Button)findViewById(R.id.button2);
        ed1=(EditText)findViewById(R.id.editText);

        wv1=(WebView)findViewById(R.id.webView);
        wv1.setWebViewClient(new WebViewClient());

        b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String url = ed1.getText().toString();

                wv1.getSettings().setLoadsImagesAutomatically(true);
                wv1.getSettings().setJavaScriptEnabled(true);
                wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
                wv1.loadUrl(url);
            }
        });

        b2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wv1.getSettings().setLoadsImagesAutomatically(true);
                wv1.getSettings().setJavaScriptEnabled(true);
                wv1.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
                wv1.loadUrl("chemin_vers_intranet");
            }
        });
    }
}

Fichier AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=...> // comme je suis nouveau, j'ai pas le droit au lien externe :(

    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Ce qui est étonnant c'est qu'une connexion sur des sites tels que Google, Yahoo, Forum Qt, ... ne pose pas de problème. En fait pour le moment il n'y a que sur l'intranet pro que j'ai besoin d'utiliser que ça bloque. Autre fait étrange : je ne rencontre pas ce souci avec d'autres navigateurs comme Opéra, Firefox, Chrome ou même l'appli Internet de mon Galaxy S6. J'ai aussi essayé sur une Galaxy Tab 2 et une Galaxy Tab A. IDEM.

De plus, j'ai fait des tests avec les navigateurs ci-dessus en désactivant les cookies : ça fonctionne correctement sur le site en question. J'en déduis donc que ça ne doit pas bloquer avec mon appli.

Et pour finir, si dans les gestions d'applications d'Android je supprime toutes les données pour ces navigateurs et de mon appli, que je les relance juste en allant sur le site en question je remarque que les "grands" navigateurs stockent plus de data que mon appli. Ça veut sûrement rien dire, mais ça peut aussi vouloir dire quelque chose .

Que pensez-vous de tout cela ? Evidemment vous comprendrez que le plus délicat, c'est que je ne peux pas vous donner l'adresse du site qui me pose problème et qu'il n'y a pour le moment qu'avec celui-là que je note ce hic.

Si vous avez une piste de réflexion je suis très preneur.

D'avance merci à tous.