![](/img/trans.png)
[英]How can I return data from JavaScript in a WebBrowser control to 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.