繁体   English   中英

如何将数据从Javascript返回到C#

[英]How to Return Data from Javascript to C#

我是这种HTML / JavaScript风格的应用程序的新手,我需要从WebBrowser控件向我的应用程序返回一些基本的导航和性能数据。 我的初始设置有一个放置在XAML中的WebBrowser控件,以及一些C#中的事件处理程序,然后我尝试使用InvokeScript从C#中调用javascript函数,然后通过ScriptNotify获取数据。 目前,我无法从JavaScript获取数据。 我使用的javascript来自一个示例,该示例在Web浏览器中显示了数据,并且我正在尝试对其进行修改,以便可以使用C#将相关片段绑定到文本块中。

MainPage.xaml

<phone:WebBrowser x:Name="Browser" Visibility="Collapsed"
                      IsScriptEnabled="True"
                      Loaded="Browser_Loaded"
                      Navigated="Browser_Navigated"
                      NavigationFailed="Browser_NavigationFailed"                          
                      ScriptNotify="Browser_ScriptNotify"/>

MainPage.xaml.cs

private string MainUri = "/Html/index.html";

private void Browser_Loaded(object sender, RoutedEventArgs e)
    {
        //tell the browser the URL to navigate to
        Browser.Navigate(new Uri(MainUri, UriKind.Relative));
    }

private void Browser_ScriptNotify(object sender, NotifyEventArgs e)
    {
        TestResultTextBlock.Text = e.Value.ToString();
    }

//When textblock is tapped, run the javascript function.
private void CheckTextBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
         object result1 = Browser.InvokeScript("printIt");                        
    }

index.html(包含javascript)

<!DOCTYPE html>
<html>
<head>
<title></title>
<script type="text/javascript">
    function printIt() {
        // show page load performance - show a few important bits, not everything
        var performanceHTML = "";
        if (featureDetect.supported) {
            if (featureDetect.unprefixed) {
                var t = window.performance.timing;
            } else if (featureDetect.prefixed == "ms") {
                var t = window.msPerformance.timing;
            } else if (featureDetect.prefixed == "webkit") {
                var t = window.webkitPerformance.timing;
            } else {
                alert("Unexpected error while fetching navigation timing data.");
                return;
            }

            var start = t.navigationStart;
            var sortable = [];
            var maxTime = 0;
            var order = ['navigationStart', 'redirectStart', 'redirectEnd',
              'fetchStart', 'domainLookupStart', 'domainLookupEnd', 'connectStart',
              'secureConnectionStart', 'connectEnd', 'requestStart', 'responseStart',
              'responseEnd', 'unloadEventStart', 'unloadEventEnd', 'domLoading', 'domInteractive',
              'msFirstPaint', 'domContentLoadedEventStart', 'domContentLoadedEventEnd',
              'domContentLoaded', 'domComplete', 'loadEventStart', 'loadEventEnd'];

            var perfEvents = Object.keys(t).length ? Object.keys(t) : Object.keys(Object.getPrototypeOf(t));
            perfEvents.forEach(function (e) {
                if (t[e] && t[e] > 0) {
                    duration = t[e] - start;
                    sortable.push([e, duration]);
                    if (duration > maxTime) {
                        maxTime = duration;
                    }
                }
            });
            sortable.sort(function (a, b) {
                return a[1] !== b[1] ? a[1] - b[1] : order.indexOf(a[0]) - order.indexOf(b[0]);
            });

            // If you wanted to log the data to the console, sortable is what you want
            // console.log(sortable.toString());

            // wrapping in a table simply for layout reasons
            performanceHTML = "<table><thead><tr><th scope=\"col\" id=\"xyz\">Property</th><th scope=\"col\" id=\"xyz\">Value</th></tr>";
            sortable.forEach(function (s) {
                performanceHTML = performanceHTML + "<tr><td>" + s[0] + "</td><td>" + s[1] + "ms</td>";
            });
            performanceHTML = performanceHTML + "</table>";

        }
        document.getElementById('performance_div').innerHTML = performanceHTML;
        document.getElementById('performance_div').style.visibility = 'visible';
    }
</script>

请注意,我是一个非常新的HTML / JavaScript,这是我第一个使用它的应用程序。 我对XAML / C#非常熟悉,这就是我要用来呈现javascript函数结果的内容。 我应该怎么做才能正确设置?

您需要从JavaScript代码中调用window.external.notify(your_value) ,以启动Browser_ScriptNotify处理函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM