WPF代码
namespace WPFJsTest
{
/// <summary>
/// Page1.xaml 的交互逻辑
/// </summary>
public partial class Page1 : Page
{
/// <summary>
/// JS页面中的JS对象实例,可以访问页面JS中的代码
/// </summary>
private dynamic scriptObject = null;
public Page1()
{
InitializeComponent();
// Retrieve the script object. The XBAP must be hosted in a frame or
// the HostScript object will be null.
if (!BrowserInteropHelper.IsBrowserHosted)
{
MessageBox.Show("不满足与JS调用条件");
return;
}
///判断是不是有js
scriptObject = BrowserInteropHelper.HostScript;
if (scriptObject != null)
{
//初始化Html页面中的回调函数的对象,让Html页面中可以调用Wpf内部方法
scriptObject.IniWPFObjectOfHtml(new CallbackClass());
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (scriptObject != null)
scriptObject.WPFInvokeJS("WPF页面参数");
}
}
/// <summary>
/// 提供给HTML页面JS调用方法的类的实例
/// </summary>
[ComVisible(true)]
public class CallbackClass
{
/// <summary>
/// JS页面调用的方法
/// </summary>
/// <param name="message"></param>
public void MyMethod(string message)
{
MessageBox.Show("JS调用WPF函数\n参数:" + message);
}
}
}
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=8" /> <!--不加上这一句,IE9貌似没效果-->
<script type="text/javascript">
// 调用WPF的JS函数
function JSInvokeWPF()
{
if (wpfObj == null)
{
alert("中间对象为空!");
}
else
{
wpfObj.MyMethod("HTML页面参数");
}
}
// 供WPF调用的函数
function WPFInvokeJS(parent)
{
alert("WPF调用JS函数\n参数:" + parent);
}
//Wpf中可以调用方法的对的实例
var wpfObj = null;
function IniWPFObjectOfHtml(obj) {
wpfObj = obj;
}
</script>
</head>
<body>
<input id="Button1" type="button" value="调用WPF方法" οnclick="JSInvokeWPF();">
<!--在这个地方将Wpf的应用程序插入到Html的界面中-->
<iframe src="WPFJsTest.xbap" frameborder="0" marginheight="0" marginwidth="0" style="height:100%; width:100%;"></iframe>
</body>
</html>