Xamarin Android中的JavascriptInterface已经过时,无法从Javascript调用C
几个月前,我根据中的示例代码为webview定制了一个Xamarin.Android渲染器 Javascript代码完美地调用了我的C#代码,但是最近在最新的更新之后,WebView控件不再能够调用C#操作, (更准确地说,如果我的目标是Android 9.0(API级别28)或更高版本) 使用API级别27仍然可以正常工作 经过进一步调查,我发现编译器在[JavascriptInterface]上给出的警告已经过时了! 他们建议改为使用(IJavascriptInterface) 下面是要检查的代码Xamarin Android中的JavascriptInterface已经过时,无法从Javascript调用C,xamarin,xamarin.android,custom-renderer,Xamarin,Xamarin.android,Custom Renderer,几个月前,我根据中的示例代码为webview定制了一个Xamarin.Android渲染器 Javascript代码完美地调用了我的C#代码,但是最近在最新的更新之后,WebView控件不再能够调用C#操作, (更准确地说,如果我的目标是Android 9.0(API级别28)或更高版本) 使用API级别27仍然可以正常工作 经过进一步调查,我发现编译器在[JavascriptInterface]上给出的警告已经过时了! 他们建议改为使用(IJavascriptInterface) 下面是要检
[JavascriptInterface]
[Export ("invokeAction")]
public void InvokeAction (string data)
{
HybridWebViewRenderer hybridRenderer;
if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget (out hybridRenderer))
{
hybridRenderer.Element.InvokeAction (data);
}
}
有人知道如何正确地实现这一点来修复它,并让Javascript再次调用我的C#代码。它仍然在我的Xamarin.Android项目中使用
[JavascriptInterface]
这是我样本的一部分:
var webview = FindViewById<WebView>(Resource.Id.webView1);
WebSettings settings = webview.Settings;
settings.JavaScriptEnabled = true;
// load the javascript interface method to call the foreground method
webView.AddJavascriptInterface(new MyJSInterface(this), "CSharp");
webview.SetWebViewClient(new WebViewClient());
和html格式:
<button type="button" onClick="CSharp.ShowToast ('Call C#')">Call C#</button>
呼叫C#
您可以参考谢谢您的回复;更准确地说,如果你的目标是安卓8.1(API级别27)或更低版本,它会起作用。但是如果你尝试以Android 9(API级别28)或更高版本为目标,它将无法工作。我用Android 9测试它。它在我的Xamarin.Android项目中工作,我稍后会在Xamarin.Forms项目中测试,并告诉你结果。谢谢,我正在使用Xamarin.Forms(4.3.0.947036)@Abdula我在Xamarin.Forms项目中测试它,上面的代码也可以工作,我在跟踪登录应用程序输出时,遇到了以下行:[chromium][INFO:CONSOLE(16)]“uncaughtreferenceerror:$未定义”,来源:file:///android_asset/Content/index.html (16) 由于某种原因,html在针对Android 9.0时无法加载JQuery文件,因此,出于测试目的,我删除了JQuery,并且成功调用了C#方法,现在我想知道为什么JQuery无法在Android 9上加载:)您的评论帮助我在另一个位置进行搜索,这要感谢错误CS0653:无法应用属性类“IJavascriptInterface”,因为它是抽象的(CS0653)(CustomRenderer.Droid)中的示例HTML在Android 9和更高版本上有问题-
实际上应该是
。https非常重要,否则Android将拒绝加载jquery并导致javascript无效。我花了半天的时间才发现这才是真正的问题,而我所有的渲染器实际上已经可以正常工作了。
<button type="button" onClick="CSharp.ShowToast ('Call C#')">Call C#</button>