c# - Xamarin HybridWebView 从 C# 调用 JS 函数
问题描述
我正在尝试获得一个 HybridWebView,其中 JS 和 C# 代码可以相互通信。我遵循了官方文档,从 JS 调用 C# 代码效果很好。但是我也需要另一种方式,这在提到的教程中没有指导。这是我走了多远:
在我的 HybridWebView 控件中,我添加了以下几行:
public event EventHandler CallJavascript;
public void InvokeJS()
{
if(CallJavascript != null)
{
CallJavascript(this, EventArgs.Empty);
}
}
在我的自定义渲染器中,我添加了 CallJavascript 方法并将其添加到OnElementChanged()
方法中
protected override void OnElementChanged(ElementChangedEventArgs<HybridWebView> e)
{
base.OnElementChanged(e);
if (Control == null)
{
var webView = new Android.Webkit.WebView(_context);
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new JavascriptWebViewClient($"javascript: {JavascriptFunction}"));
SetNativeControl(webView);
}
if (e.OldElement != null)
{
Control.RemoveJavascriptInterface("jsBridge");
var hybridWebView = e.OldElement as HybridWebView;
hybridWebView.Cleanup();
e.OldElement.CallJavascript += OnElementCallJavascript;
}
if (e.NewElement != null)
{
Control.AddJavascriptInterface(new JSBridge(this), "jsBridge");
Control.LoadUrl($"file:///android_asset/Content/{Element.Uri}");
e.NewElement.CallJavascript += OnElementCallJavascript;
}
}
private void OnElementCallJavascript(object sender, EventArgs e)
{
var webView = new Android.Webkit.WebView(_context);
Device.BeginInvokeOnMainThread(() =>
{
webView.EvaluateJavascript("javascript:increaseCount();", null);
});
}
但是,我在 OnElementCallJavascript 中获得的 webview 不是我从中调用方法的 WebView,因此不会评估 javascript。任何人都知道我怎么能做到这一点?
解决方案
问题是我正在创建一个新的Android.WebKit.WebView
. 像这样使用它解决了这个问题:
Device.BeginInvokeOnMainThread(() =>
{
Control.EvaluateJavascript("javascript:increaseCount();", null);
});
推荐阅读
- php - 查询数据库的简码属性
- mysql - MySQL 按关联表分组和排序
- python - 在调用时指定 Anaconda 环境
- php - Symfony 3.4.20 和 FOSUserBundle - “记住我”不起作用
- reactjs - 如何使用 React Hooks 定位特定项目以切换单击?
- java - 为什么我的 addListenerForSingleValueEvent 停止从 Android 应用程序中的 Firebase 数据库读取数据?
- r - 为什么我的遗传算法返回负适应值?
- java - JAVAFX:在运行 PauseTransition 时设置光标 CURSOR.WAIT
- xml - ASP.NET Core 2.2,XML 输入格式化程序
- python - Python - 虽然循环不适用于时间