我正在使用以下代码将Java脚本注入到我的Android Web视图中
网页浏览
webView = FindViewById<WebView> (Resource.Id.learningWebView);
if (null != webView) {
webView.Settings.JavaScriptEnabled = true;
webView.Settings.SetSupportZoom (true);
webView.SetWebViewClient (new CustomWebViewClient ());
}
WebView客户端实施
public class CustomWebViewClient : WebViewClient
{
public override bool ShouldOverrideUrlLoading (WebView view, string url)
{
view.LoadUrl (url);
return true;
}
public override void OnPageStarted (WebView view, string url, Android.Graphics.Bitmap favicon)
{
}
public override void OnPageFinished (WebView view, string url)
{
base.OnPageFinished (view, url);
HideLearningDivs (view);
}
void HideLearningDivs (WebView view)
{
try {
view.EvaluateJavascript ("document.getElementById(\"suiteBar\").parentNode.style.display='none'", new JavaScriptResult ());
} catch (Exception ex) {
Console.WriteLine (ex.Message);
}
}
IValueCallback实现
public class JavaScriptResult : IValueCallback
{
public IntPtr Handle {
get;
set;
}
public void Dispose ()
{
}
public void OnReceiveValue (Java.Lang.Object result)
{
}
}
但是在执行应用程序期间,出现以下错误。
java.lang.NoSuchMethodError:类Landroid / webkit / WebView中没有名称为'evaluateJavascript'signature ='(Ljava / lang / String; Landroid / webkit / ValueCallback;)V'的方法;
谁能帮我找到实施中的问题。
我将链接到下面找到答案的地方,但是基本上您需要检查Android KitKat(4.4),因为该功能直到那时才引入。如果设备的运行低于4.4,则可能需要做一些不同的事情以恢复值(如果您确实需要对它进行一些处理)。例如使用Hybrid WebView
某种(可能是Xamarin Forms Labs的版本)和/或使用AddJavaScriptInterface()
这是代码:
if(Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.Kitkat) {
webView.EvaluateJavascript("javascript:GoBack();", null);
} else {
webView.LoadUrl("javascript:GoBack();");
}
https://forums.xamarin.com/discussion/24894/webview-evaluatejavascript-issues
*编辑:自编写此书以来,我发现了一篇出色的文章Adam Pedley(我最近显然与他有很多联系),内容涉及为Xamarin Forms进行此操作,还提到了将Android 4.2更改为JS引擎。运行的JavaScript可能工作第一次,但它也设置文档对象的脚本结果,所以你可能需要将结果赋予的document.getElementById()
,以一个变量来解决此问题:var x = document.getElementById()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句