#android #jquery #ajax #android-studio
#Android #jquery #ajax #android-studio
Вопрос:
Я создал веб-проект с использованием asp.net и загрузка веб-сайта в Android web view. Я использовал Ajax на веб-сайте и перенаправил на URL для достижения успеха. Она отлично работает в веб-браузере и мобильном браузере. Но в Android web view ajax не работает, и он не перенаправляется. Я провел много тестов и не смог найти проблему. Я добавил, return false
что это помогает перенаправлять URL, но это неправильное решение. Функция успеха Ajax не работает. В консоли нет ошибки. Вот мой код:-
package com.project.projectname;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Home extends AppCompatActivity {
private WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
webview = (WebView) findViewById(R.id.webView);
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("tel:") || url.startsWith("https://www.facebook.com/sharer") || url.startsWith("http://twitter.com/share") || url.startsWith("https://wa.me/") || url.startsWith("https://plus.google.com/share")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
view.reload();
return true;
}
view.loadUrl(url);
return true;
//return false; This is redirect but ajax success function is not working
}
});
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
// webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webview.getSettings().setAppCacheEnabled(true);
webview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webview.getSettings().setUseWideViewPort(true);
webview.getSettings().setSavePassword(true);
webview.getSettings().setSaveFormData(true);
webview.getSettings().setEnableSmoothTransition(true);
webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webview.loadUrl("your website URL");
}
@Override
public void onBackPressed() {
if (webview.isFocused() amp;amp; webview.canGoBack()) {
webview.goBack();
} else {
super.onBackPressed();
finish();
}
}
}
Код Ajax на веб-сайте
$.ajax({
url: '/tapaking/Checkout/Details',
type: "POST",
data: JSON.stringify({
cart: json2,
note: note,
schdate: schdate,
schtime: schtime,
payment: payment
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) {
if (response.success) {
$('.sc-cart-clear').click();
window.location.href = "https://yourwebsite.com/User/UserProfile";
} else {
}
},
error: function() {
//alert("An error has occured!!!");
}
});
Комментарии:
1. Вы проверили, работает ли AJAX-запрос в WebView с использованием инструментов удаленного отладчика developers.google.com/web/tools/chrome-devtools / … ?
Ответ №1:
Если вы перенаправляете в другое место, вам может не потребоваться нажимать какую-либо кнопку программно. События щелчка из-за кода в мобильном браузере / webview считаются небезопасными и игнорируются.
Кроме того, в случае мобильного webview мы используем document.location
вместо window.location.href
. Я думаю, что эти незначительные изменения в вашем коде могут помочь:
$.ajax({
url: '/tapaking/Checkout/Details',
type: "POST",
data: JSON.stringify({
cart: json2,
note: note,
schdate: schdate,
schtime: schtime,
payment: payment
}),
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(response) {
if (response.success) {
// Probably we don't need to click something here.
// If required, we can clear with direct invocation of clear action.
// $('.sc-cart-clear').click();
document.location = "https://yourwebsite.com/User/UserProfile";
} else {
}
},
error: function() {
//alert("An error has occured!!!");
}
});
Если document.location
не работает, также попробуйте document.location.replace(url)
.
Комментарии:
1. Я пробовал
document.location
,document.location.replace(url)
иwindow.location.href
. Это вообще не поддерживается. Я чувствую, что перенаправление ajax не поддерживается в webview. Итак, я создаю страницу благодарственного сообщения оттуда, через несколько секунд я перенаправляю на страницу назначения с помощью jquery.