2010-06-03 5 views
13

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(); 
} 


} 

The background Application is my app, running in an emulator. The top application is the browser. You'll see the browser has the firebug icon, and can activate the firebug, but the application does not have the firebug icon. http://img413.imageshack.us/img413/9628/myapp.gif

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.

+0

«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 ...) –

+0

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

+0

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

Répondre

4

Fonctionne très bien pour moi. Je peux voir l'icône FireBug dans WebView.

Cette ligne est mal, je suppose que vous devez supprimer:

webview.getSettings().setUserAgentString(OverideUserAgent_IE); 
+0

C'est le seul but de cette application, il doit remplacer le champ de l'agent utilisateur afin d'afficher l'application de back-office. "Plus d'informations de fond, afin d'obtenir l'application de 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 le fais en modifiant l'utilisateur WebView Agent." – JustinKaz

+0

Alors, est ce que vous dites, parce que je modifie l'agent utilisateur, il affecte la façon dont le Javascript est affiché? Douteuse, rappelez-vous que j'utilise le firebug comme un test, le backoffice a des centaines de fonctions JavaScript qui ne sont pas chargées du tout. Le Firebug était la chose de placards que je dois tester sans donner aux gens l'accès au système backoffice. En fin de compte, j'ai besoin d'un moyen de remplacer le champ UserAgent et toujours avoir accès à la fonctionnalité JavaScript complète. – JustinKaz

+2

FireBug analyse l'agent utilisateur et se comporte en conséquence.Si vous dites que vous êtes IE FireBug fait certaines choses de manière spécifique à IE qui ne fonctionne pas pour Android WebView. Vous pouvez le voir vous-même - si vous supprimez un faux agent utilisateur FireBug fera ces choses par défaut et vous verrez l'icône. J'ai donc peur que vous deviez analyser vos scripts et trouver les choses qu'ils font de manière spécifique à IE. – Fedor

Questions connexes