未在Xamarin

问题描述:

我试图从活动为JavaScript分享一些数据,但我所有的结果都失败在所有执行EvaluateJavascript或使用loadURL,这是我当前的代码:未在Xamarin

C#

var webView = FindViewById<WebView>(Resource.Id.webView); 

webView.SetWebChromeClient(new WebChromeClient()); 

webView.Settings.JavaScriptCanOpenWindowsAutomatically = true; 
webView.Settings.JavaScriptEnabled = true; 
string script = string.Format("javascript:UpdateData('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}');", "1", "2", "3", "4", "5", "6", "7", "8", "9"); 

webView.LoadUrl("file:///android_asset/index.html"); 

if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) 
{ 
    webView.EvaluateJavascript(script, null); 
} 
else 
{ 
    webView.LoadUrl(script); 
} 

的JavaScript 的index.html内(我试过的头部和身体的末尾添加代码太):

<script type="text/javascript"> 
    function UpdateData(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) { 
     alert("Hi"); 
    } 
</script> 

的AndroidManifest.xml

<?xml version="1.0" encoding"utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="Test.Test" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="19" /> 
    <application android:label="Test"></application> 
    <uses-permission android:name="android.permission.INTERNET" /> 
</manifest> 

老实说,我不知道我在做什么错,因为什么也没有发生,基本的网页完美呈现,但JavaScript没有触发。有谁之前经历过这个吗?

这是我的配置,如果他们是有用的: Configuration

avd

我认为问题是,你正试图加载的URL后立即评估脚本。拨打webView.LoadUrl(...)后,WebView需要一些时间才能完全加载包含<script>的页面。

您需要的是创建一个从WebViewClient派生的类并覆盖OnPageFinished方法。

public class JavaScriptWebViewClient : WebViewClient 
{ 
    public override void OnPageFinished(WebView view, string url) 
    { 
     base.OnPageFinished(view, url); 

     string script = string.Format("javascript:UpdateData('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}');", "1", "2", "3", "4", "5", "6", "7", "8", "9"); 

     if (Build.VERSION.SdkInt >= BuildVersionCodes.Kitkat) 
     { 
      view.EvaluateJavascript(script, null); 
     } 
     else 
     { 
      view.LoadUrl(script); 
     } 
    } 
} 

而原始代码,然后将需要设置Web客户端:

var webView = FindViewById<WebView>(Resource.Id.webView); 
webView.SetWebChromeClient(new WebChromeClient()); 
webView.Settings.JavaScriptCanOpenWindowsAutomatically = true; 
webView.Settings.JavaScriptEnabled = true; 

//set the custom web client 
webView.SetWebViewClient(new JavaScriptWebViewClient()); 

webView.LoadUrl("file:///android_asset/index.html"); 
+0

有史以来最好的解决方案!谢谢! –

+0

非常有用,谢谢但我认为你的答案有一些错误,例如:if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.KITKAT)... –

+0

哦,不应该是,问题是Xamarin .Android是Android API的C#版本,它的命名约定与Java不同:-) –