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();
}
}
Ứ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.
"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 ...) –
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
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