首页 > 解决方案 > CEFSharp“未捕获的 ReferenceError:方法未定义\n@ about:blank:1:0”

问题描述

我在 WPF 应用程序中使用 CEFSharp。

目前我正在基于铬的浏览器中加载本地 html 文件。

xml

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Button Name="buttonTest" Content="Click me" Grid.Row="0" Width="50px" Height="30px" Click="buttonTest_Click" />
    <!--<WebBrowser Name="webBrowser" Grid.Row="1" />-->
    <!--<WebBrowser Name="webBrowser" Grid.Row="1" />-->
    <wpf:ChromiumWebBrowser x:Name="webBrowser" Grid.Row="1"/>
</Grid>

CS

BrowserSettings browserSettings = new BrowserSettings();
browserSettings.FileAccessFromFileUrls = CefState.Enabled;
browserSettings.Javascript = CefState.Enabled;
browserSettings.UniversalAccessFromFileUrls = CefState.Enabled;
webBrowser.BrowserSettings = browserSettings;    
webBrowser.Address = "file:///" + path;

加载 html 工作正常。

现在我试图通过单击 WPF 按钮调用 javascript 函数。

private async void buttonTest_Click(object sender, RoutedEventArgs e)
{
    try
    {
        if (webBrowser.IsBrowserInitialized)
        {
            var task = await webBrowser.EvaluateScriptAsync("document.body.style.background = 'red';");
            var task1 = await webBrowser.EvaluateScriptAsync("startInterval()", new Object { });
            //webBrowser.ExecuteScriptAsync("alert(2 + 2);");
        }

        //webBrowser.InvokeScript("startInterval");
     }
     catch (Exception ex)
     {
     }
}

html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link rel="stylesheet" href="css/bootstrap.min.css" />
    <link rel="stylesheet" href="css/site.css" />

    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.bundle.min.js"></script>
    <script src="js/site.js"></script>
    <script type="text/javascript">

        $(function () {
            'use strict';

            function startInterval() {
                alert("qqf5");
            }

            function clearInterval() {

            }

            $("#buttonGetData").click(function () {
                startInterval();
            });

        });
    </script>
</head>
<body>
    <div class="container">
        <main role="main" class="pb-3">
            <button type="button" id="buttonGetData">Get Data!</button>
        </main>
    </div>
</body>
</html>

如果我单击按钮,则从 wpf 中更改页面背景颜色,但不调用方法。

但是,如果我从 html 页面单击它,它工作正常。

我在这里缺少什么?

标签: javascriptc#htmlwpfcefsharp

解决方案


推荐阅读