gpt4 book ai didi

xamarin.android - 在 Android WebView 中从 JavaScript 调用 C#

转载 作者:行者123 更新时间:2023-12-04 07:14:58 25 4
gpt4 key购买 nike

我想从我的 WebView 中加载的 HTML 中调用 C# 类/方法。

我定义了一个 JS2CS 类,它包含一个显示 Toast 的方法,如下所示:

using Android.Content;
using Android.Widget;
using Java.Interop;

namespace CrossPlatformApp_Android
{
public class JS2CS : Java.Lang.Object
{
private Context context;

public JS2CS (Context context)
{
this.context = context;
}

[Export ("run")]
public void Run ()
{
Toast.MakeText (context, "Hello from C#", ToastLength.Short).Show ();
}
}
}

我在我的 HomePage.html 文件中定义了一个按钮,如下所示:

<button type="button" onclick="JS2CS.run()" >Call C#</button>

HomePage.html 保存在我项目的 Assets 文件夹中,我将其加载到我的 WebView 中,如下所示:

myWebView.Settings.JavaScriptEnabled = true;
myWebView.SetWebChromeClient (new CustomWebChromeClient());
myWebView.LoadUrl ("file:///android_asset/Content/HomePage.html");

CustomWebChromeClientWebChromeClient 的简单扩展,它不提供比其父级更多的功能。

最后,我将我的 JS2CS 对象注入(inject)到我的 WebView 之后 调用 LoadUrl(...),如下:

myWebView.AddJavascriptInterface (new JS2CS (this), "JS2CS");

不幸的是,这不能完成这项工作。当我启动我的应用程序并单击 html 按钮时,我收到以下消息:

[Web Console] Uncaught ReferenceError: JS2CS is not defined at file:///android_asset/Content/HomePage.html:22

如果我在 LoadUrl(...) 之前调用 AddJavascriptInterface(...) 方法,我会收到以下错误消息:

[Web Console] Uncaught TypeError: Object [object Object] has no method 'run' at file:///android_asset/Content/HomePage.html:22

有什么想法吗??!!

以上实现是基于以下两个url:

Call C# from JavaScript

Monodroid Javascript Call-back

最佳答案

嗯,在尝试了各种方法之后...我在 Android 中偶然发现了这句话 WebView.addJavascriptInterface(Object, String)文档:

...For applications targeted to API level JELLY_BEAN_MR1 and above, only public methods that are annotated with JavascriptInterface can be accessed from JavaScript...

我将我的 Android 应用程序的目标版本从 API 19 降低到 API 14,并且没有对问题中的代码进行其他更改,现在它可以工作了!欢呼!然而,这确实提出了一个问题,即如何将 JavaScript 接口(interface)注入(inject) WebView 以用于应用程序的目标 API 17+,但这是另一个线程的另一个问题......

Edit: To get it to work for an app targeting API 17+, all you have to do is add the [JavascriptInterface] annotation to the method being exported.

关于xamarin.android - 在 Android WebView 中从 JavaScript 调用 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com