当在 HTML 框架中承载应用程序时,可以与包含 XBAP 的网页进行通信。 通过检索 BrowserInteropHelper 的 HostScript 属性,可以实现此目的。 此属性返回一个表示 HTML 窗口的脚本对象。 然后可以通过使用常规的点语法访问 window object(window 对象)上的属性、方法和事件。 还可以访问脚本方法和全局变量。 以下示例演示如何检索脚本对象和关闭浏览器。
private void Button_Click(object sender, RoutedEventArgs e)
{
// Retrieve the script object. The XBAP must be hosted in a frame or
// the HostScript object will be null.
var scriptObject = BrowserInteropHelper.HostScript;
// Call close to close the browser window.
scriptObject.Close();
}
Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs)
' Retrieve the script object The XBAP must be hosted in a frame or
' the HostScript object will be null.
Dim scriptObject = BrowserInteropHelper.HostScript
' Call close to close the browser window.
scriptObject.Close()
End Sub
调试使用 HostScript 的 XBAP
如果 XBAP 使用 HostScript 对象与 HTML 窗口进行通信,则必须指定两个设置,以在 Visual Studio 中运行和调试应用程序。 应用程序必须有权访问其源站点,并且必须使用包含 XBAP 的 HTML 页启动应用程序。 以下步骤介绍如何检查这两个设置:
在 Visual Studio 中,打开项目属性。
在“安全”选项卡上,单击“高级”。
将出现高级安全设置对话框。
请确保选中“授予应用程序对其源站点的访问权”复选框,然后单击“确定”。
在“调试”选项卡上,选择“使用 URL 启动浏览器”选项,然后指定包含 XBAP 的 HTML 页的 URL。
在 Internet Explorer 中,单击“工具”按钮,然后选择“Internet 选项”。
将显示“Internet 选项”对话框。
单击“高级” 选项卡。
在“安全性”下面的“设置”列表中,选中“允许活动内容在我的计算机上的文件中运行”复选框。
单击“确定”。
重启 Internet Explorer 后更改才会生效。
注意
在 Internet Explorer 中启用活动内容可能会给计算机带来风险。 如果不想更改 Internet Explorer 安全设置,则可以从服务器启动 HTML 页,并将 Visual Studio 调试程序附加到进程。
XBAP 安全注意事项
通常在被限制到 Internet 区域权限集的部分信任的安全沙盒中执行 XBAP。 因此,实现必须支持 Internet 区域中所支持的 WPF 元素的子集,或者必须提升应用程序的权限。 有关详细信息,请参阅安全性。
在应用程序中使用 WebBrowser 控件时,WPF 会在内部实例化本机 WebBrowser ActiveX 控件。 如果应用程序是 Internet Explorer 中运行的部分信任的 XBAP,则 ActiveX 控件会在 Internet Explorer 进程的专用线程中运行。 因此,存在以下限制:
WebBrowser 控件应提供类似于宿主浏览器的行为,包括安全限制。 可以通过 Internet Explorer 安全设置控制这些安全限制中的某些限制。 有关详细信息,请参阅安全性。
在 HTML 页中跨域加载 XBAP 时,将引发异常。
输入位于与 WPF WebBrowser 不同的线程上,因此无法截获键盘输入且不会共享 IME 状态。