Android Webview中的Ajax无法工作

8

我正在使用webview加载一个网站,该网站中使用了Ajax,在Web浏览器和移动浏览器上都可以正常工作,但在Android webview上,Ajax不起作用,控制台中也没有错误。这是我的代码:

public class Activity_WebView extends AppCompatActivity implements  
 ConnectivityReceiver.ConnectivityReceiverListener {
WebView webview;
ProgressDialog pro_dialog;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web_view);

    webview = (WebView) findViewById(R.id.webview);
    webview.getSettings().setPluginState(WebSettings.PluginState.ON);
    webview.setWebViewClient(new loadinsame());
    pro_dialog = new ProgressDialog(Activity_WebView.this);
    webview.getSettings().setJavaScriptEnabled(true);
    webview.getSettings().setDomStorageEnabled(true);
    webview.getSettings().setAllowUniversalAccessFromFileURLs(true);

    boolean connection = checkConnection();
    if (connection) {
        webview.loadUrl("website url");
    } else {
        Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
       internet", Toast.LENGTH_SHORT).show();
        dialog_Show(webview, "Please check you Inernet connect and Reload.", 
        false);
    }
}

@Override
public void onNetworkConnectionChanged(boolean isConnected) {
    if (!isConnected) {
        Toast.makeText(Activity_WebView.this, "Sorry! Not connected to 
        internet", Toast.LENGTH_SHORT).show();
    }
}

private class loadinsame extends WebViewClient {

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        pro_dialog.setCancelable(false);
        pro_dialog.setMessage("Loading...");
        pro_dialog.show();
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
        return true;
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        pro_dialog.dismiss();

    }

    @Override
    public void onReceivedError(final WebView webview, WebResourceRequest 
    request, WebResourceError error) {
        super.onReceivedError(webview, request, error);
        pro_dialog.dismiss();
       // dialog_Show(webview, "Error Occur, Do you want to Reload?", true);

    }
}

@Override
public void onBackPressed() {

    if (webview.canGoBack()) {
        webview.goBack();
    } else {
        super.onBackPressed();
    }
}

private boolean checkConnection() {
    boolean isConnected = ConnectivityReceiver.isConnected();
    return isConnected;
}

@Override
protected void onResume() {
    super.onResume();
    MyApplication.getInstance().setConnectivityListener(this);
}
}

当我使用 Chrome 模拟器检查网站时,发现我的 Ajax 请求一直处于挂起状态,然后在一段时间后被取消了。提前感谢您的帮助。
5个回答

8

仅仅是支持@Jeff Thomas的评论,通过设置

mWebView.getSettings().setDomStorageEnabled(true);

成功了!


0

解决方案

  1. 如果您想在WebView中加载Web URL,则需要按照我的代码进行操作。这段代码可以很好地工作,并且可以在Web页面中使用任何类型的脚本语言。

     public void webviewCallBack(String coverUrl) {
        WebView  WebView  webView = (WebView) findViewById(R.id.web_view);
            webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
            webView.getSettings().setPluginState(WebSettings.PluginState.ON);
            webView.getSettings().setAppCacheEnabled(true);
            webView.getSettings().setDatabaseEnabled(true);
            webView.getSettings().setDomStorageEnabled(true);
            webView.getSettings().setBuiltInZoomControls(true);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.clearView();
            webView.measure(100, 100);
            webView.getSettings().setUseWideViewPort(true);
            webView.getSettings().setLoadWithOverviewMode(true);
    
            webView.setWebViewClient(new WebViewClient() {
    
                // For api level bellow 24
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    Log.d("weburl__", url);
    
                    if (url.startsWith("http") || url.startsWith("https")) {
                        // Return false means, web view will handle the link
                        return false;
                    } else if (url.startsWith("tel:")) {
                        // Handle the tel: link
                        handleTelLink(url);
    
   // Return true means, leave the current web view and handle the url itself
                        return true;
                    }
    
                    return false;
                }
    
                // From api level 24
                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                    // Get the tel: url
                    String url = request.getUrl().toString();
                    Log.d("weburl_____", url);
    
                    if (url.startsWith("http") || url.startsWith("https")) {
                   // Return false means, web view will handle the link
                        return false;
                    } else if (url.startsWith("tel:")) {
                        // Handle the tel: link
                        handleTelLink(url);
    
                        // Return true means, leave the current web view and handle the url itself
                        return true;
                    }
    
                    return false;
                }
            });
    
            // Load the url into web view
            webView.loadUrl(coverUrl);
            hoadler();
        }


    public void hoadler() {


        Runnable task = new Runnable() {
            public void run() {
                material_design_progressbar.setVisibility(View.VISIBLE);
            }
        };
        worker.schedule(task, 5, TimeUnit.SECONDS);
    }

  1. 我希望这段代码对你有所帮助!

0

以下是如何编辑AndroidManifes.xml文件的方法:

在应用程序文件夹中找到AndroidManifest.xml文件:
android/app/src/main/AndroidManifest.xml
定位应用程序子元素。 添加以下标记:
android:usesCleartextTraffic=”true”
现在,应用程序子元素应该如下所示:

<application
    android:name=”io.flutter.app.Test”
    android:label=”bell_ui”
    android:icon=”@`enter code 
    here`mapmap/ic_launcher”
    android:usesCleartextTraffic=”true”>

保存 AndroidManifest.xml 文件。


0
当我启用了JavaScript时,它可以正常工作。
 WebView myWebView = (WebView) findViewById(R.id.webview);
 myWebView.loadUrl("");
 myWebView.getSettings().setDomStorageEnabled(true);
 myWebView.getSettings().setJavaScriptEnabled(true);
 myWebView.setWebViewClient(new WebClient());

0
更新jQuery的版本
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接