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

如何在Xamarin中调用JavaScript方法?

我来帮你搞定在Xamarin中调用JavaScript方法的需求~

你提到的HybridKit确实只支持JavaScript调用C#函数的场景,没法直接实现C#主动调用JS的功能。不过针对Xamarin.Forms,我们可以通过自定义渲染器来完美解决这个问题,下面是一步步的实现方案:

在Xamarin.Forms中调用JavaScript方法的实现步骤

1. 定义共享项目的自定义WebView控件

首先在Xamarin.Forms的共享项目里,创建一个继承自WebView的自定义控件,添加触发JS调用的方法和事件:

public class HybridWebView : WebView
{
    public event EventHandler<string> EvaluateJavaScriptRequested;

    // 供外部调用的方法,触发JS执行请求
    public void EvaluateJavaScript(string script)
    {
        EvaluateJavaScriptRequested?.Invoke(this, script);
    }
}

2. Android平台的自定义渲染器实现

在Android项目中创建渲染器,通过Android原生的WebView实例来执行JS代码:

[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace YourAppNamespace.Droid
{
    public class HybridWebViewRenderer : WebViewRenderer
    {
        public HybridWebViewRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                ((HybridWebView)e.NewElement).EvaluateJavaScriptRequested += OnEvaluateJS;
            }
            if (e.OldElement != null)
            {
                ((HybridWebView)e.OldElement).EvaluateJavaScriptRequested -= OnEvaluateJS;
            }
        }

        private void OnEvaluateJS(object sender, string script)
        {
            Control?.EvaluateJavascript(script, null);
        }
    }
}

3. iOS平台的自定义渲染器实现

在iOS项目中,用WKWebView(推荐,比旧版UIWebView性能更好)来执行JS:

[assembly: ExportRenderer(typeof(HybridWebView), typeof(HybridWebViewRenderer))]
namespace YourAppNamespace.iOS
{
    public class HybridWebViewRenderer : WkWebViewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e)
        {
            base.OnElementChanged(e);

            if (e.NewElement != null)
            {
                ((HybridWebView)e.NewElement).EvaluateJavaScriptRequested += OnEvaluateJS;
            }
            if (e.OldElement != null)
            {
                ((HybridWebView)e.OldElement).EvaluateJavaScriptRequested -= OnEvaluateJS;
            }
        }

        private void OnEvaluateJS(object sender, string script)
        {
            WebView?.EvaluateJavaScript(script, (result, error) =>
            {
                // 可选:处理JS执行的结果或错误
                if (error != null)
                {
                    Console.WriteLine($"JS执行出错: {error.LocalizedDescription}");
                }
            });
        }
    }
}

4. 在页面中使用并调用JS方法

最后在Xamarin.Forms的页面里,实例化自定义的HybridWebView,等页面加载完成后就可以调用JS方法了:

public class MainPage : ContentPage
{
    public MainPage()
    {
        var hybridWebView = new HybridWebView
        {
            Source = new UrlWebViewSource { Url = "你的网页地址" }
        };

        // 网页加载完成后调用JS方法
        hybridWebView.Navigated += (s, e) =>
        {
            // 示例:调用网页中的sayHello方法,传入参数"Xamarin"
            hybridWebView.EvaluateJavaScript("sayHello('Xamarin')");
        };

        Content = hybridWebView;
    }
}

这样就能顺利从C#代码中调用网页里的JavaScript方法啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:17:38