2010-06-03 2 views
13

저는 백 오피스 사이트에 연결하는 애플리케이션을 작성하고 있습니다. 백 오피스 사이트에는 평균 사이트의 최소 100 배 이상의 JavaScript 기능이 포함되어 있습니다. 유감 스럽지만로드되지 않아 많은 기능이 제대로 작동하지 않습니다. 그래서 나는 시험을하고있다. FireBugLite 자바 스크립트 텍스트를로드하는 서버에 페이지를 넣습니다. 안드로이드 WebView가 그것을로드합니다 많은 자바 스크립트와 완벽한 테스트하고 볼 수 있습니다. WebView는 아무 것도로드하지 않지만 브라우저는 Firebug 아이콘을로드합니다. 왜 지구상에서 차이가 나는지, 왜 WebView가 아닌 ​​브라우저에서 실행할 수 있습니까? 어떤 제안.Android WebView가 JavaScript 파일을로드하지 않지만 Android 브라우저가 정상적으로로드합니다.

악의적 인 백 오피스 응용 프로그램을 Droid (또는 Windows를 제외한 다른 플랫폼)에서 사용할 수있게하기 위해 bakcoffice 응용 프로그램을 트릭하여 웹 사이트에 액세스하는 것이 Internet Explorer라고 믿을 필요가있었습니다. WebView User Agent를 수정하여이 작업을 수행합니다.

또한이 애플리케이션의 경우 방문 페이지를 슬림화하여 도움을 드릴 수있는 소스를 제공 할 수있었습니다. 당신이 오른쪽 아래 모서리에 더 방화범을 볼 수

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

내 응용 프로그램은 백그라운드에서 실행된다. 그러나 브라우저 (상단의 에뮬레이터)는 동일한 페이지를 가지고 있지만 방화 녀석을 보여줍니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 나는 충분한 메모리가 애플리케이션, 프로세스 전력 할당 또는 물리적 메모리에 할당되지 않았다고 가정하고있다. 나는 말할 수 없다. 내가 아는 것은 결과가 이상하다는 것이다.

나는 안드로이드 장치와 동일한 것을 만들어 내고, 응용 프로그램은 방화 광물을 보이지 않지만 브라우저는 방화 광물을 보여줍니다.

이미 웹 브라우저에 JavaScript가 있습니다. 웹보기가 웹 브라우저와 다른 점이 있습니다.

+0

"나는 이미 웹 브라우저에서 자바 스크립트를"- 그건 당신이 (참) setJavaScriptEnabled라는 것을 의미합니까 당신의 웹보기의 설정에 ? (그냥 ... 확인) –

+0

네, 그 내 무효 LoadSettings() 내가 전에 호출하는 페이지를로드 한 후보기에 추가되었습니다. – JustinKaz

+0

아니요, 안드로이드 브라우저에서 작동하는지 테스트 한 결과, 내 애플리케이션에서 작동해야합니다. 어떻게 든 (대부분은 아님) 일부 자바 스크립트가로드되지 않습니다. 안드로이드 브라우저로 http://kscserver.com/main-leap-slim.html을 탐색 할 수 없다면 FireBug는 클릭 할 수 있지만 응용 프로그램에서는 표시되지 않지만 Javascript Pop-Up 맵은 여전히 ​​작동합니다. – JustinKaz

답변

4

저에게 도움이됩니다. WebView에서 FireBug 아이콘을 볼 수 있습니다. 이 줄은 악

, 제 생각 엔 당신은 그것을 제거해야합니다 :

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

이 애플리케이션의 유일한 목적은 백 오피스 애플리케이션을 표시하기 위해 사용자 에이전트 필드를 무시해야한다는 것입니다. "악의적 인 백 오피스 응용 프로그램을 Droid (또는 Windows를 제외한 다른 플랫폼)에서 사용하려면 배경 정보가 더 필요합니다. 웹 사이트에 액세스하는 것이 Internet Explorer인지 판단하기 위해 bakcoffice 응용 프로그램을 속일 필요가있었습니다 .WebView 사용자를 수정하여이 작업을 수행했습니다. 에이전트." – JustinKaz

+0

사용자 에이전트가 Javascript가 표시되는 방식에 영향을 미치므로 사용자의 말은 무엇입니까? 필자는 방화범을 테스트로 사용하고 있다는 것을 기억해야합니다. 백 오피스에는 수백 가지 JavaScript 기능이 전혀로드되어 있지 않습니다. 방화범은 내가 백 오피스 시스템에 대한 액세스 권한을 부여하지 않고 테스트해야하는 벽장이었습니다. 궁극적으로 UserAgent 필드를 재정의하고 여전히 전체 JavaScript 기능에 액세스 할 수있는 방법이 필요합니다. – JustinKaz

+2

FireBug는 사용자 에이전트를 분석하고 그에 따라 작동합니다.IE라고 말하면 FireBug는 Android WebView에서 작동하지 않는 IE 관련 방식으로 몇 가지 작업을 수행합니다. 가짜 사용자 에이전트를 제거하면 FireBug가 기본 작업을 수행하고 아이콘이 표시됩니다. 따라서 스크립트를 분석하고 IE 별 방법으로 스크립트를 찾아야합니다. – Fedor

관련 문제