2010-06-03 28 views
13

Tôi đang viết một ứng dụng kết nối với một trang web văn phòng trở lại. Trang web backoffice chứa toàn bộ các hàm JavaScript, ít nhất 100 lần trang web trung bình. Thật không may nó không tải chúng, và gây ra nhiều chức năng không hoạt động đúng. Vì vậy, tôi đang chạy thử nghiệm. Tôi đặt một trang trên máy chủ của tôi tải văn bản javascript FireBugLite. Rất nhiều javascript và hoàn hảo để kiểm tra và xem liệu Android WebView có tải nó hay không. WebView không tải gì cả, nhưng trình duyệt tải Biểu tượng Firebug. Điều gì trên trái đất sẽ tạo nên sự khác biệt, tại sao nó có thể chạy trong trình duyệt chứ không phải trong WebView của tôi? Bất kỳ đề xuất.Android WebView không tải tệp JavaScript, nhưng Android Browser tải nó tốt

Thông tin cơ bản khác, để có được ứng dụng backoffice hôi thối có sẵn trên Droid (hoặc bất kỳ nền tảng nào khác ngoại trừ cửa sổ) tôi cần phải lừa ứng dụng bakcoffice để tin rằng những gì truy cập vào trang web là Internet Explorer. Tôi làm điều này bằng cách sửa đổi tác nhân người dùng WebView.

Ngoài ra đối với ứng dụng này tôi đã làm mỏng trang đích của mình, vì vậy tôi có thể cung cấp cho bạn nguồn cung cấp cho tôi trợ giúp.

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

Ứng dụng của tôi đang chạy ở chế độ nền, và như bạn có thể thấy không có Firebug ở góc dưới bên phải. Tuy nhiên trình duyệt (trình giả lập trên cùng) có cùng trang nhưng hiển thị con đom đóm. Tôi đang làm gì sai? Tôi giả sử rằng bộ nhớ của nó không đủ cấp phát cho ứng dụng, phân bổ công suất quá trình hoặc một điều bộ nhớ vật lý. Tôi không thể nói, tất cả những gì tôi biết là kết quả thật kỳ lạ.

Tôi nhận được cùng một hình thức thiết bị Android của tôi, ứng dụng không hiển thị con bọ lửa nhưng trình duyệt hiển thị con đom đóm.

Tôi đã có JavaScript trên trình duyệt web, vấn đề là chế độ xem web hoạt động khác với trình duyệt web.

+0

"Tôi đã có JavaScript trên trình duyệt web trên" - Điều đó có nghĩa rằng bạn gọi setJavaScriptEnabled (true) vào các thiết lập của webview của bạn ? (chỉ để chắc chắn ...) –

+0

Có trong LoadSettings void() của tôi mà tôi gọi trước khi tôi tải một trang sau khi nó đã được thêm vào xem. – JustinKaz

+0

Không có tôi thử nghiệm rằng nó hoạt động trong trình duyệt Android, tôi cần nó để làm việc bên trong ứng dụng của tôi. Bằng cách nào đó một số (không nhất) Javascript không được tải. Nếu bạn không điều hướng đến http://kscserver.com/main-leap-slim.html với trình duyệt Android thì FireBug có thể nhấp, nhưng trong ứng dụng của tôi nó không hiển thị nhưng bản đồ Javascript Pop-Up vẫn hoạt động. – JustinKaz

Trả lời

4

Chỉ hoạt động tốt cho tôi. Tôi có thể thấy biểu tượng FireBug trong WebView.

Dòng này là ác, tôi đoán bạn nên loại bỏ nó:

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

Đó là mục đích duy nhất của ứng dụng này, nó cần ghi đè lên trường đại lý người dùng để hiển thị ứng dụng văn phòng sau. "Thêm thông tin cơ bản, để có được ứng dụng backoffice hôi thối có sẵn trên Droid (hoặc bất kỳ nền tảng nào khác ngoại trừ cửa sổ), tôi cần phải lừa ứng dụng bakcoffice để tin rằng những gì truy cập vào trang web là Internet Explorer. Tôi làm điều này bằng cách sửa đổi Người dùng WebView Đặc vụ." – JustinKaz

+0

Vì vậy, đó là những gì bạn nói, bởi vì tôi đang sửa đổi tác nhân người dùng nó ảnh hưởng đến cách Javascript được hiển thị? Nghi ngờ, hãy nhớ rằng tôi đang sử dụng firebug như là một thử nghiệm, backoffice có hàng trăm chức năng JavaScript mà không được nạp ở tất cả. Firebug là thứ mà tôi phải kiểm tra mà không cần phải cho mọi người truy cập vào hệ thống backoffice. Cuối cùng tôi cần một cách để ghi đè lên trường UserAgent và vẫn có quyền truy cập vào chức năng JavaScript đầy đủ. – JustinKaz

+2

FireBug phân tích tác nhân người dùng và hoạt động phù hợp.Nếu bạn nói IE FireBug thực hiện một số thứ theo cách cụ thể của IE không hoạt động cho Android WebView. Bạn có thể tự mình xem - nếu bạn xóa FireBug tác nhân người dùng giả sẽ làm những điều đó theo cách mặc định và bạn sẽ thấy biểu tượng. Vì vậy, tôi e rằng bạn sẽ phải phân tích các tập lệnh của mình và tìm những thứ mà họ thực hiện theo cách cụ thể của IE. – Fedor

Các vấn đề liên quan