Android WebView没有加载JavaScript文件,但Android浏览器加载它很好

时间:2010-06-03 19:04:48

标签: android android-sdk-1.6 android-webview

我正在编写一个连接到后台网站的应用程序。后台站点包含大量JavaScript函数,至少是普通站点的100倍。不幸的是,它没有加载它们,并导致许多功能无法正常工作。所以我正在进行测试。我在我的服务器上放了一个页面,它加载了FireBugLite javascript文本。它有很多javascript,非常适合测试并查看Android WebView是否会加载它。 WebView不加载任何内容,但浏览器会加载Firebug图标。究竟是什么会产生影响,为什么它可以在浏览器中运行而不是在我的WebView中运行?任何建议。

更多背景信息,为了在Droid(或除Windows之外的任何其他平台)上获得臭味的后台应用程序,我需要欺骗bakcoffice应用程序以相信访问该网站的是Internet Explorer。我是通过修改WebView用户代理来完成的。

同样对于这个应用程序,我已经缩小了我的登陆页面,所以我可以给你提供帮助的来源。

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

我的应用程序在后台运行,因为您可以在右下角看不到Firebug。但是,浏览器(顶部的模拟器)具有相同的页面,但显示了firebug。我究竟做错了什么?我假设它没有足够的内存分配给应用程序,处理能力分配或物理内存的东西。我不知道,我所知道的结果都很奇怪。

我从我的Android设备获得相同的东西,应用程序显示没有萤火虫,但浏览器显示萤火虫。

我已经在网络浏览器上安装了JavaScript,问题是网页浏览器与网络浏览器不同。

1 个答案:

答案 0 :(得分:4)

对我来说非常棒。我可以在WebView中看到FireBug图标。

这条线是邪恶的,我想你应该把它删掉:

webview.getSettings().setUserAgentString(OverideUserAgent_IE);