c# - 为什么调用 OnBackPressed 时我的应用程序崩溃?
问题描述
当按下后退按钮(OnBackPressed)但应用程序崩溃时,我正在尝试执行一些 javascript(webview Eval)。有人能弄清楚发生了什么吗?
MainActivity.cs
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
/*
some code
*/
base.OnCreate(savedInstanceState);
global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
LoadApplication(new App());
}
public override void OnBackPressed()
{
MainPage.ExecJS();
}
}
MainPage.xaml.cs
public partial class MainPage : ContentPage
{
public static double ScreenWidth { get; set; }
public static double ScreenHeight { get; set; }
public static WebView webnav;
StackLayout parent = null;
public MainPage()
{
InitializeComponent();
WebView webnav = new WebView
{
HeightRequest = 1000,
WidthRequest = 1000,
Source = "https://www.comprarmusicas.com.br/mobile/index.php"
};
parent = new StackLayout();
parent.Children.Add(webnav);
Content = parent;
}
public static void ExecJS()
{
string jsCode = "alert('ok');";
webnav.Eval(jsCode);
}
}
解决方案
您不是WebView
在 .ctor 中分配静态变量,而是创建一个新的局部实例变量。
WebView
从您实例化/分配 WebView 的位置删除类型,即。
public MainPage()
{
InitializeComponent();
webnav = new WebView // this assigns to the "public static WebView webnav;"
{
HeightRequest = 1000,
~~~
推荐阅读
- performance - 在 Docker 中覆盖 ENTRYPOINT 时停止 Apache2 的速度要慢得多
- excel - 如果列表中的值匹配,则在下面插入相应的值
- reactjs - React firebase 无法取消订阅监听器
- google-analytics - 谷歌分析不会在任何仪表板中显示任何数据
- recaptcha - 发布到不同服务器时的 Google recaptcha
- java - 有没有办法避免在 if else 块中重复方法调用?
- android-studio - 使用 Android Studio 4.0 创建布局检查器 *.li 文件
- laravel - Laravel - 如何在 Laravel 中删除空白
- selenium-webdriver - 当移动仿真和多个浏览器量角器/硒网络驱动程序时,为什么会出现“元素不可交互”?
- dynamics-365 - 如何访问 Dynamics 365 商业中心云服务的数据库?