从Javascript Windows手机浏览器调用c#函数

时间:2014-05-29 03:54:37

标签: windows-phone-8 browser webbrowser-control

我可以从使用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);}

2 个答案:

答案 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事件的处理程序。 这个事件处理程序会加载新内容。