Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin Android中的JavascriptInterface已经过时,无法从Javascript调用C_Xamarin_Xamarin.android_Custom Renderer - Fatal编程技术网

Xamarin Android中的JavascriptInterface已经过时,无法从Javascript调用C

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) 下面是要检

几个月前,我根据中的示例代码为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>