【发布时间】:2009-03-06 07:17:31
【问题描述】:
我有一个包含 Frame 控件的 WPF 应用程序。框架控件显示 html 内容。 html 页面包含一个 JavaScript 函数,我想在 Frame 和 WPF 代码中加载 html 页面后调用该函数?有没有一种方法可以调用在 WPF 框架控件和 WPF 代码中加载的 html 页面的 JavaScript 方法?
【问题讨论】:
标签: c# wpf wpf-controls
我有一个包含 Frame 控件的 WPF 应用程序。框架控件显示 html 内容。 html 页面包含一个 JavaScript 函数,我想在 Frame 和 WPF 代码中加载 html 页面后调用该函数?有没有一种方法可以调用在 WPF 框架控件和 WPF 代码中加载的 html 页面的 JavaScript 方法?
【问题讨论】:
标签: c# wpf wpf-controls
您不能与框架内的 HTML 进行交互。为了与 HTML 交互,您可以使用 .NET 3.5 SP1 的 WPF 的 WebBrowser 控件。
您可以在此视频中看到 WebBrowser 控件的运行情况:
http://channel9.msdn.com/posts/AdamKinney/WPF-35-SP1-App-Model-with-Jennifer-Lee/
【讨论】:
无法访问 DOM,所以恐怕不行。如果您确实需要它,那么您最好的选择可能是从 System.Windows.Forms 嵌入 WinForms WebBrowser 控件。
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:f="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
xmlns:fi="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration.dll" >
<Grid>
<fi:WindowsFormsHost>
<f:WebBrowser x:Name="BrowserControl" Url="http://www.myurl.com/"/>
</fi:WindowsFormsHost>
</Grid>
</Page>
【讨论】:
在您的 HTML 页面中使用 <body onload="javascript:alert('hi its loaded. do what you want here');">,例如 myhtmlpage.html。
然后在您的 WPF 代码中使用框架 XAML 控件 (<Frame Name="myWpfFrame" Source="http://myurl/myhtmlpage.html">)。
假设您希望调用 javascript仅一次并且 仅在 HTML 之后,此解决方案将起作用页面已加载。
如果你想多次调用js,你可以在需要的时候从代码中设置框架控件的源属性...如..myWpfFrame.Source = myWpfFrame.Source;
【讨论】: