Я работаю над проектом на Xamarin C#, и у меня проблемы с запуском Java Script. Есть ли в настоящее время способ вызвать определенную функцию JS и получить ее возвращаемое значение?
Я знаю, что JS можно запускать в WebView; однако как я могу получить результат?
На данный момент JS поступает по ссылке на моем сайте. Любая помощь будет очень высоко ценится!
Вот код, который я пробовал:
MyView.axml
<android.webkit.WebView
android:id = "@+id/web_view"
android:layout_width = "match_parent"
android:layout_height = "0dp"
local:layout_constraintTop_toBottomOf = "@+id/pause"
local:layout_constraintBottom_toBottomOf = "parent"/>
MyView.cs
позвонил в protected override void OnCreate
webView.Settings.JavaScriptEnabled = true;
webView.SetWebViewClient(new MyWebViewClient());
webView.LoadUrl("http://www.example.com/scheduleV5.js");
MyWebViewClient (класс)
public class MyWebViewClient : WebViewClient
{
public override void OnPageFinished(WebView view, String url)
{
view.EvaluateJavascript("javascript: getSchedule();", new EvaluateBack());
}
}
EvaluateBack (класс)
public class EvaluateBack : Java.Lang.Object, IValueCallback
{
public void OnReceiveValue(Java.Lang.Object value)
{
Toast.MakeText(Android.App.Application.Context, value.ToString(), ToastLength.Short).Show();// you will get the value "100"
var test = value.ToString();
}
}
могло это сработать?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


ты мог бы сделать это
Js вызывает методы в C#
Настройте метод OnCreate в Activity:
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());
Создайте класс C# :
class MyJSInterface : Java.Lang.Object
{
Context context;
public MyJSInterface (Context context)
{
this.context = context;
}
[JavascriptInterface]
[Export]
public void ShowToast (string msg)
{
Toast.MakeText(context, msg, ToastLength.Short).Show();
}
}
А потом это вызывается в JS :
<button type = "button" onClick = "CSharp.ShowToast ('Call C#')">Call C#</button>
Вы можете обратиться к этому документу : https://github.com/xamarin/recipes/tree/master/Recipes/android/controls/webview/call_csharp_from_javascript
C# вызывает метод в JS и получает значение обратного вызова
webView.EvaluateJavascript("javascript: callJS();", new EvaluateBack());
class EvaluateBack : Java.Lang.Object,IValueCallback
{
public void OnReceiveValue(Object value)
{
Toast.MakeText(Android.App.Application.Context, value.ToString(), ToastLength.Short).Show();// you will get the value "100"
}
}
в JS:
<script>
function callJS(){
return 100;
}
</script>
это могло бы вам помочь?
Я могу немного запутаться, вы хотите вызвать метод JS в C# и получить значение обратного вызова? Если да, обратитесь ко второму обновленному мной методу.
Идеально! второй метод - это то, что я ищу. Я попробую и дам вам знать.
Я продолжаю получать нулевое возвращаемое значение. Просто для пояснения звоню: webView.LoadUrl("http://mywebsite.com/file.js"); , а затем оцениваю скрипт?
Вы можете настроить «WebViewClient», а затем вызвать «webview.evaluatescript» в «OnPageFinished»
По-прежнему появляется null ... я обновлю сообщение с кодом, который я пробовал завтра.
Починил это! Пришлось использовать ссылку на html-страницу, на которой использовался java-скрипт, вместо прямой ссылки на файл. Спасибо за вашу помощь!
См. Как передать данные в WebView Javascript и обратно или Xamarin Forms WebView, выполняющий JavaScript