【发布时间】:2019-11-06 23:04:53
【问题描述】:
几个月前,我有一个自定义 Xamarin.Android 渲染器,用于基于示例代码的 web 视图 https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/custom-renderer/hybridwebview
Javascript 代码完美地调用了我的 C# 代码,但是最近在最新更新之后,WebView 控件不再能够调用 C# 操作, (更准确地说,如果我的目标是 Android 9.0(API 级别 28)或更高版本) 使用 API 级别 27 仍然可以正常工作
经过更多调查,我发现编译器在 [JavascriptInterface] 已过时发出警告! https://docs.microsoft.com/en-us/dotnet/api/android.webkit.javascriptinterface?view=xamarin-android-sdk-9 他们建议改用(IJavascriptInterface)
这里是要审查的代码
[JavascriptInterface]
[Export ("invokeAction")]
public void InvokeAction (string data)
{
HybridWebViewRenderer hybridRenderer;
if (hybridWebViewRenderer != null && hybridWebViewRenderer.TryGetTarget (out hybridRenderer))
{
hybridRenderer.Element.InvokeAction (data);
}
}
有谁知道如何正确地实现这个来解决这个问题并让 Javascript 再次调用我的 C# 代码。
【问题讨论】:
-
错误 CS0653:无法应用属性类“IJavascriptInterface”,因为它是抽象的 (CS0653) (CustomRenderer.Droid)
-
docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/… 中的示例 HTML 在 Android 9 及更高版本上存在问题 -
<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>实际上应该是<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>。 https很重要,否则Android会拒绝加载jquery,导致javascript失效。当我的所有渲染器实际上都已经正常工作时,我花了半天时间才发现这是真正的问题。
标签: xamarin xamarin.android custom-renderer