我可以从使用Webbrowser控件渲染的html文件的javascript中调用c#函数吗? 在我的webbrowser控件中,我加载一个html页面,html页面包含一个函数callC#,它将在内部调用c#函数并传递一个参数。有没有办法做到这一点?在WPF中,我在Awesomium webbrowser controland的帮助下做了以下代码行
JSObject myObject = browsercontrol.CreateGlobalJavascriptObject("myappObj");
myObject.Bind("MyCustomFunc", true, JSHandler_CustomFunc);
private void JSHandler_CustomFunc(object sender, JavascriptMethodEventArgs args)
{
if (args.MustReturnValue)
{
string value = args.Arguments[0];
}
}
在javascript中调用函数
function callAppFunctionfromJS(){
var returnVal2 = myappObj.MyCustomFunc(paramvalue);}
答案 0 :(得分:1)
您可以通过ScriptNotify
控件的WebView
事件执行此操作。
假设您的项目文件夹中有一个test.html文件。然后代码如下:
HTML(test.html)
<html>
<body>
<script>
function myfunc() {
// this will trigger the ScriptNotify event of the WebView
window.external.notify("someParameters");
}
</script>
<button onclick="javascript:myfunc()">Test</button>
</body>
</html>
XAML
<Grid>
<WebView x:Name="MyWebView" ScriptNotify="WebView_ScriptNotify" Source="ms-appx-web:///test.html" />
</Grid>
C#(XAML背后的代码)
private void WebView_ScriptNotify(object sender, NotifyEventArgs e)
{
var args = e.Value; // will be "someParameters"
// Call your C# method here
}
您也可以查看these samples。包含了更全面的WebView示例。
编辑:我刚注意到它标记为Windows Phone 8.如果是Windows Phone 8 SilverLight应用程序,XAML看起来会有所不同(见下文),但原理是相同的。< / p>
XAML Windows Phone 8 SilverLight
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<phone:WebBrowser x:Name="MyWebBrowser" ScriptNotify="WebBrowser_ScriptNotify" IsScriptEnabled="True" />
</Grid>
答案 1 :(得分:1)
要从Javascript调用C#代码,请查看&window; .external.notify&#39;和WebView的ScriptNotify事件处理程序:Ref
确保在WebBrowser控件上设置IsScriptEnabled="True"
并注册ScriptNotify
事件的处理程序。
这个事件处理程序会加载新内容。