gpt4 book ai didi

android - 将 webView.AddJavascriptInterface 与 MonoDroid 一起使用

转载 作者:行者123 更新时间:2023-11-30 04:38:06 24 4
gpt4 key购买 nike

我正在使用 MonoDroid,并希望可以从我的 WebView 调用 C# 代码。

我正在这样做(C#):

protected override void OnCreate(Bundle bundle)
{
[...]
LinearLayout layout = FindViewById<LinearLayout>(Resource.Id.MyLayout);
var webView = new WebView(this);
webView.SetWebChromeClient(new WebChromeClient());
webView.Settings.JavaScriptEnabled = true;
webView.AddJavascriptInterface(new JSAccesibleObject(), "cSharpObject");
webView.LoadUrl("file:///android_asset/test.html");
layout.AddView(webView);
}

public class JSAccesibleObject : Java.Lang.Object
{
public void method1()
{

}
}

在 Javascript 中,定义了 cSharpObject,但它没有属性。

alert(cSharpObject); //mynamespace.Activity1_JSAccesibleObjec@f4438fe8
for (var prop in cSharpObject)
alert(prop); //this never gets called
alert(cSharpObject.method1) //undefined
alert(cSharpObject.method1()) //fails

我做错了什么,还是这在 MonoDroid 中不起作用?

最佳答案

A) 在您的方法上添加 [Export] 属性。

B) 在 xamarian 网站上: http://docs.xamarin.com/android/recipes/Controls/WebView/Call_C%23_from_JavaScript

C) 在 .java 文件中写入你的 JavaScriptInterface 类型,包括 .java使用 AndroidJavaSource Build 操作在您的项目中创建文件,并在 Activity1.OnCreate() 中执行:

IntPtr JavaScriptInterface_Class = JNIEnv.FindClass ("the/package/for/JavaScriptInterface");
// TODO: Update "the/package/for" as appropriate for your type.
IntPtr JavaScriptInterface_ctor = JNIEnv.GetMethodID (JavaScriptInterface_Class, "<init>", "()V");
IntPtr instance = JNIEnv.NewObject (JavaScriptInterface_Class, JavaScriptInterface_ctor);

appView.AddJavascriptInterface (new Java.Lang.Object (instance), "Android");

关于android - 将 webView.AddJavascriptInterface 与 MonoDroid 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6505878/

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