在WP7 WebBrowser控件中从Javascript调用.NET对象

时间:2011-09-01 06:48:18

标签: javascript windows-phone-7

是否可以从WP7应用程序中的WebBrowser控件中加载的Javascript访问本地Windows Phone Silverlight C#/ .NET对象?

2 个答案:

答案 0 :(得分:12)

不直接,但WebBrowser中的javascript可以使用window.external.notify异步调用应用程序。应用程序可以使用WebBrowser.ScriptNotify事件检测这些通知,并使用WebBrowser.InvokeScript回调javascript。

这是一个(未经测试的)示例。

HTML:

<html>
<head>
<script type="text/javascript">
    function beginCalculate()
    {
        var inputValue = parseInt(document.getElementById('inputText').value);

        window.external.notify(inputValue);
    }

    function endCalculate(result)
    {
        document.getElementById('result').innerHTML = result;
    }
</script>
</head>
<body>
    <h2>Add 5 to a number using notify</h2>

    <div>
        <input type="text" id="inputText" />
        <span> + 5 =</span>
        <span id="result">??</span>
    </div>

    <input type="button" onclick="beginCalculate()" />
</body>
</html>

应用:

/// <WebBrowser x:Name="Browser" ScriptNotify="Browser_ScriptNotify" />

private void Browser_ScriptNotify(objec sender, NotifyEventArgs e)
{
    int value = Int32.Parse(e.Value);

    string result = (value + 5).ToString();

    // endCalculate can return a value
    object scriptResult = Browser.InvokeScript("endCalculate", result);
}

答案 1 :(得分:0)

如果您使用WP7的WebBrowser连接到远程网站(并且必须如此,并且WP7不承载Web服务器),您也可以从普通桌面测试Web应用程序。

通常,如果您需要在客户端(JavaScript)和服务器端(在您的情况下为C#)之间进行通信,具体取决于具体的上下文和需求,您可以使用一些不同的技术,例如Page Methods(google for ASP.NET页面方法)。

我的理解是WP7浏览器介于IE8和IE9之间,与两者相比,JavaScript引擎略有限制,但是像Page Method这样基本的东西应该可以工作,然后我会先从普通的PC然后从手机上测试它。验证是否有效以及是否有什么破坏。