You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Error CS0120错误解决:非静态成员myWebView需对象引用

解决跨页面访问public WebView触发CS0120错误的方案

错误原因

CS0120错误的核心是你试图通过类名直接访问实例成员——myWebView是MainPage实例的成员,不是静态成员,必须通过MainPage的实际运行实例才能访问,而不是直接写MainPage.myWebView。

具体解决方法

1. 获取MainPage的运行实例并访问控件

根据你的框架(MAUI/WPF/UWP等),可以通过以下方式获取MainPage的实例:

  • 如果MainPage是应用的主页面:
    var mainPage = Application.Current.MainPage as MainPage;
    if (mainPage != null)
    {
        // 执行JS注入
        await mainPage.myWebView.EvaluateJavaScriptAsync("你的JS代码内容");
    }
    
  • 如果是通过导航栈跳转的页面,可以从导航栈中回溯获取:
    var mainPage = Navigation.NavigationStack.FirstOrDefault(p => p is MainPage) as MainPage;
    if (mainPage != null)
    {
        // 执行JS注入操作
    }
    

2. 更规范的做法:封装注入逻辑

直接跨页面操作控件违反封装原则,建议在MainPage中定义公开方法来处理JS注入,避免直接暴露控件:
在MainPage的代码后台添加:

public async Task InjectJsToWebView(string jsCode)
{
    await myWebView.EvaluateJavaScriptAsync(jsCode);
}

然后在其他页面调用这个方法:

var mainPage = Application.Current.MainPage as MainPage;
if (mainPage != null)
{
    await mainPage.InjectJsToWebView("console.log('注入成功')");
}

3. 验证x:FieldModifier是否生效

确保XAML中的声明正确,并且清理解决方案重新生成(避免缓存导致字段未设为public):

<local:HybridWebView x:Name="myWebView" x:FieldModifier="public" />

内容的提问来源于stack exchange,提问作者Costas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 09:05:19