J'écris une application qui se connecte à un site de back-office. Le site de backoffice contient tout un tas de fonctions JavaScript, au moins 100 fois le site moyen. Malheureusement, il ne les charge pas, et provoque une grande partie de la fonctionnalité de ne pas fonctionner correctement. Donc, je cours un test. J'ai mis une page sur mon serveur qui charge le texte javascript FireBugLite. C'est beaucoup de javascript et parfait pour tester et voir si l'Android WebView le chargera. WebView ne charge rien, mais le navigateur charge l'icône Firebug. Qu'est-ce qui ferait la différence, pourquoi peut-il fonctionner dans le navigateur et non dans mon WebView? Aucune suggestion. Plus d'informations de fond, afin d'obtenir l'application backoffice puant disponible sur un Droid (ou toute autre plate-forme, sauf Windows) je devais tromper l'application bakcoffice pour croire que l'accès au site est Internet Explorer. Je fais cela en modifiant l'agent utilisateur WebView.Android WebView ne pas charger un fichier JavaScript, mais Android Browser le charge bien
Aussi pour cette application j'ai aminci ma page d'atterrissage, ainsi je pourrais te donner la source pour m'offrir l'aide.
package ksc.myKMB;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebSettings;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class myKMB extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); /** Performs base set up */
/** Create a Activity of this Activity, IE myProcess */
myProcess = this;
/*** Create global objects and web browsing objects */
HideDialogOnce = true;
webview = new WebView(this) {
};
webChromeClient = new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
// Activities and WebViews measure progress with different scales.
// The progress meter will automatically disappear when we reach 100%
myProcess.setProgress((progress * 100));
//CreateMessage("Progress is : " + progress);
}
};
webViewClient = new WebViewClient() {
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Toast.makeText(myProcess, MessageBegText + description + MessageEndText, Toast.LENGTH_SHORT).show();
}
public void onPageFinished (WebView view, String url) {
/** Hide dialog */
try {
// loadingDialog.dismiss();
} finally {
}
//myProcess.setProgress(1000);
/** Fon't show the dialog while I'm performing fixes */
//HideDialogOnce = true;
view.loadUrl("javascript:document.getElementById('JTRANS011').style.visibility='visible';");
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (HideDialogOnce == false) {
//loadingDialog = ProgressDialog.show(myProcess, "",
// "One moment, the page is laoding...", true);
} else {
//HideDialogOnce = true;
}
}
};
getWindow().requestFeature(Window.FEATURE_PROGRESS);
webview.setWebChromeClient(webChromeClient);
webview.setWebViewClient(webViewClient);
setContentView(webview);
/** Load the Keynote Browser Settings */
LoadSettings();
webview.loadUrl(LandingPage);
}
/** Get Menu */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return true;
}
/** an item gets pushed */
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// We have only one menu option
case R.id.quit:
System.exit(0);
break;
case R.id.back:
webview.goBack();
case R.id.refresh:
webview.reload();
case R.id.info:
//IncludeJavascript("");
}
return true;
}
/** Begin Globals */
public WebView webview;
public WebChromeClient webChromeClient;
public WebViewClient webViewClient;
public ProgressDialog loadingDialog;
public Boolean HideDialogOnce;
public Activity myProcess;
public String OverideUserAgent_IE = "Mozilla/5.0 (Windows; MSIE 6.0; Android 1.6; en-US) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Safari/523.12.2 myKMB/1.0";
public String LandingPage = "http://kscserver.com/main-leap-slim.html";
public String MessageBegText = "Problem making a connection, Details: ";
public String MessageEndText = " For Support Call: (xxx) xxx - xxxx.";
public void LoadSettings() {
webview.getSettings().setUserAgentString(OverideUserAgent_IE);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setBuiltInZoomControls(true);
webview.getSettings().setSupportZoom(true);
}
/** Creates a message alert dialog */
public void CreateMessage(String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message)
.setCancelable(true)
.setNegativeButton("Close", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
Mon application est en cours d'exécution en arrière-plan, et comme vous pouvez le voir sans Firebug dans le coin inférieur droit. Cependant le navigateur (l'émulateur en haut) a la même page mais montre le firebug. Qu'est-ce que je fais mal? Je suppose que c'est soit pas assez de mémoire allouée à l'application, l'allocation de puissance de processus, ou une chose de mémoire physique. Je ne peux pas le dire, tout ce que je sais, c'est que les résultats sont étranges.
Je reçois la même chose à partir de mon appareil Android, l'application ne montre aucun firebug mais le navigateur affiche le firebug.
J'ai déjà JavaScript sur le navigateur Web, le problème est que la vue Web agit différemment du navigateur Web.
«J'ai déjà JavaScript sur le navigateur Web sur » - Est-ce que cela signifie que vous avez appelé setJavaScriptEnabled (true) sur les paramètres de votre WebView ? (juste pour être sûr que ...) –
Oui c'est dans mon vide LoadSettings() que j'appelle avant de charger une page après qu'elle a été ajoutée à la vue. – JustinKaz
Non, j'ai testé que cela fonctionne dans le navigateur android, j'ai besoin de travailler dans mon application. D'une manière ou d'une autre, certains Javascript ne sont pas chargés. Si vous ne naviguez pas sur http://kscserver.com/main-leap-slim.html avec le navigateur android, le FireBug est capable de cliquer, mais dans mon application il n'est pas visible mais la carte Javascript Pop-Up fonctionne toujours. – JustinKaz