Eval不能在我的HTML-Xamarin表单中调用javascript函数

Eval不能在我的HTML-Xamarin表单中调用javascript函数,javascript,html,xamarin,webview,xamarin.forms,Javascript,Html,Xamarin,Webview,Xamarin.forms,我试图使用WebView控件的Eval函数在我的WebView中运行javascript函数。WebView使用Javascript函数正确地加载了我的HTML,但是当我使用WebView.Eval(Javascript_函数)时,什么都不会发生,函数也不会被调用。 这里是我的CS代码: var _Script = string.Format("enableBeacon(\"{0}\") ", id); _WebViewMap.Eval(_Script); 这里是我的Xaml:

我试图使用WebView控件的Eval函数在我的WebView中运行javascript函数。WebView使用Javascript函数正确地加载了我的HTML,但是当我使用WebView.Eval(Javascript_函数)时,什么都不会发生,函数也不会被调用。 这里是我的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>
提前感谢

请尝试以下内容:

webView.Navigated += (o, s) => {
 webView.Eval("alert('text')");
 };
请试试这个:

webView.Navigated += (o, s) => {
 webView.Eval("alert('text')");
 };

我相信卡米尔是对的

在使用WebView.Eval调用Javascript之前,网页必须完成加载

下面是我要演示的代码:

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>
公共部分类WebViewPage:ContentPage
{
公共WebViewPage()
{
初始化组件();
BindingContext=新的WebViewPageViewModel();
this.Title=App.CurrentProfileHeader;
MyWebView.Navigated+=MyWebView\u Navigated;
}
私有void MyWebView_已导航(对象发送方,WebNavigatedEventArgs e)
{
string token=“来自C#World!2的你好”;
Eval(“displayToken(““+token+”)”);
}
出现时受保护的覆盖无效()
{
base.OnAppearing();
string token=“来自C#World的你好!”;
Eval(“displayToken(““+token+”)”);
}
}
你好,残酷的世界

函数显示令牌(令牌) { 警报(令牌); } 函数myFunction(){ 警报(“页面已加载”); }

使用此代码,您应该看到在html页面onload事件之前触发“onappearing”。但是,导航事件在html页面完全加载后触发。

我相信Kamil是正确的

在使用WebView.Eval调用Javascript之前,网页必须完成加载

下面是我要演示的代码:

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>
公共部分类WebViewPage:ContentPage
{
公共WebViewPage()
{
初始化组件();
BindingContext=新的WebViewPageViewModel();
this.Title=App.CurrentProfileHeader;
MyWebView.Navigated+=MyWebView\u Navigated;
}
私有void MyWebView_已导航(对象发送方,WebNavigatedEventArgs e)
{
string token=“来自C#World!2的你好”;
Eval(“displayToken(““+token+”)”);
}
出现时受保护的覆盖无效()
{
base.OnAppearing();
string token=“来自C#World的你好!”;
Eval(“displayToken(““+token+”)”);
}
}
你好,残酷的世界

函数显示令牌(令牌) { 警报(令牌); } 函数myFunction(){ 警报(“页面已加载”); }

使用此代码,您应该看到在html页面onload事件之前触发“onappearing”。但是,导航事件在html页面完全加载后触发。

所有内容看起来都是正确的。但是,我不确定
WebView.Eval()
方法对于空白有多挑剔。示例代码在右括号后显示一个额外的空格。你有<代码>“EnabeBeon”(\“{ 0 }”)“”,也许尝试“<代码>”EnabelBeaon(\“{ 0 }”)“”在结束括号之后没有额外的空间。我试图从我的函数“EnabeBeaon”中删除空白,但WebVIEW仍然不调用内部的JavaScript…所有这些都看起来正确。但是,我不确定
WebView.Eval()
方法对于空白有多挑剔。示例代码在右括号后显示一个额外的空格。你有<代码>“EnabeBeon”(\“{ 0 }”)“”,也许尝试< <代码>】EnabelBeaon(\“{ 0 }”)“”在结束括号之后没有额外的空间。我试图从我的函数“EnabelBeaon”中删除空白。但是WebView仍然没有调用内部的Javascript..添加一些解释和答案,说明此答案如何帮助解决当前问题添加一些解释和答案,说明此答案如何帮助解决当前问题