#javascript #html #xamarin #webview #xamarin.forms
#javascript #HTML #xamarin #webview #xamarin.forms
Вопрос:
Я пытаюсь использовать функцию Eval элемента управления WebView для запуска функции javascript в моем WebView. WebView правильно загрузил мой HTML с помощью функции Javascript, но когда я использую WebView.Eval(javascript_function), ничего не происходит, и функция не вызывается. Вот мой CS-код:
var _Script = string.Format("enableBeacon("{0}") ", id);
_WebViewMap.Eval(_Script);
Здесь мой Xaml:
<StackLayout VerticalOptions="Center" HorizontalOptions="Center">
<WebView x:Name="WebViewMap" WidthRequest="1000" HeightRequest="1000" Source="{Binding HtmlSource.HtmlUrlSource}"/>
</StackLayout>
Вот моя функция Javascript:
function enableBeacon(id)
{
var myBeacon = document.getElementById(id);
myBeacon.style.display = "";
alert("I am an alert box!");
}
Заранее спасибо
Комментарии:
1. Все это выглядит правильно. Однако не уверен, насколько требователен
WebView.Eval()
метод к пробелам. В вашем примере кода после закрывающей круглой скобки отображается дополнительный пробел. У вас есть"enableBeacon("{0}") "
, поэтому, возможно, попробуйте"enableBeacon("{0}")"
отметить, что после закрывающей круглой скобки нет дополнительного пробела.2. Я попытался удалить пустое пространство из моей функции «enableBeacon», но все равно WebView не вызывает Javascript внутри..
Ответ №1:
Пожалуйста, попробуйте это:
webView.Navigated = (o, s) => {
webView.Eval("alert('text')");
};
Комментарии:
1. Добавьте некоторое объяснение с ответом о том, как этот ответ помогает OP в устранении текущей проблемы
Ответ №2:
Я считаю, что Камил был прав.
Веб-страница должна завершить загрузку, прежде чем вы сможете вызвать Javascript с помощью WebView.Eval.
Вот мой код для демонстрации:
public partial class WebViewPage : ContentPage
{
public WebViewPage ()
{
InitializeComponent ();
BindingContext = new WebViewPageViewModel();
this.Title = App.CurrentProfileHeader;
MyWebView.Navigated = MyWebView_Navigated;
}
private void MyWebView_Navigated(object sender, WebNavigatedEventArgs e)
{
string token = "Hello from the C# World! 2";
MyWebView.Eval("displayToken('" token "')");
}
protected override void OnAppearing()
{
base.OnAppearing();
string token = "Hello from the C# World!";
MyWebView.Eval("displayToken('" token "')");
}
}
<html>
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body onload="myFunction()">
<p>Hello Cruel World!</p>
<script type="text/javascript">
function displayToken(token)
{
alert(token);
}
function myFunction() {
alert("Page has loaded");
}
</script>
</body>
</html>
Используя этот код, вы должны увидеть, что «onappearing» срабатывает перед событием загрузки HTML-страницы. Однако событие навигации срабатывает после полной загрузки HTML-страницы.