我有一个基本问题,我无法真正理解问题的根源。我正在通过 xamarin.android webview 设计一个项目。现在我需要在 Web 视图中运行 Java 函数并检查 if 函数中的返回值。我搜索了所有网站,在所有网站中,我得到了以下代码:在主活动类中:
public class MainActivity : AppCompatActivity
{
WebView web_view;
.
.
.
在类中定义 web_view public
在 OnCreate :
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.activity_main);
web_view = FindViewById<WebView>(Resource.Id.webview);
web_view.Settings.JavaScriptEnabled = true;
web_view.Settings.BuiltInZoomControls = true;
web_view.Settings.AllowContentAccess = true;
web_view.SetWebViewClient(new HelloWebViewClient());
web_view.LoadUrl("https://www.example.com");
}
在返回键按下:
public override bool OnKeyDown(Android.Views.Keycode keyCode, Android.Views.KeyEvent e)
{
if (keyCode == Keycode.Back)
{
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat)
{
JavascriptResult jsr = new JavascriptResult();
string strjs = "closePackageDetails();";
web_view.EvaluateJavascript(strjs, jsr);
string rrr = jsr.strResult;
Toast.MakeText(this, "message send:" + rrr, ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "android version less 4.4" , ToastLength.Long).Show();
}
}
}
在 JavascriptResult 类上(在根目录中 MainActivity 中的 C# 类中分开)
namespace webviewapp
{
class JavascriptResult : Java.Lang.Object, IValueCallback
{
public string strResult;
public void OnReceiveValue(Java.Lang.Object result)
{
Toast.MakeText(Android.App.Application.Context, "رسیدن نتیجه احضار شد", ToastLength.Long);
strResult = ((Java.Lang.String)result).ToString();
}
}
}
<> 一切正常,程序调试无误,APK文件创建成功。在手机上安装程序并运行后,网页加载完毕,一切正常。通过触摸后退按钮,JavaScript 函数被正确执行,结果在 Web 视图中可见。但结果是布尔值,不会返回。事实上,OnReceiveValue 过程不起作用。
变量 'rrr' 始终显示空值。
哪里出了问题真的让我很困惑?