【问题标题】:Web browser and Embedded resourcesWeb 浏览器和嵌入式资源
【发布时间】:2016-03-03 23:35:08
【问题描述】:

我正在使用win-forms WebControl(也尝试了内置的WPF浏览器),它的内容是定义为嵌入式资源的简单html和JavaScript文件。

对于我的 POC,所有文件都必须嵌入。

XAML

<Window x:Class="WebPOC.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
    Title="MainWindow" Height="350" Width="525">
<Grid>
  <WindowsFormsHost>
    <forms:WebBrowser  x:Name="WebBrowser"/>
  </WindowsFormsHost>
</Grid>

代码隐藏

public MainWindow()
{
   InitializeComponent();
   var stream = Assembly.GetEntryAssembly().GetManifestResourceStream("WebPOC.www.index.html");
   WebBrowser.DocumentStream = stream;
}

网页内容:

alert("test");
<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <script src="js/test.js"></script>
    <title></title>
</head>
<body>
    <p>test</p>
</body>
</html>

由于某种原因,链接的 JavaScript 文件出错:

有什么想法吗?

【问题讨论】:

  • 它在错误的地方寻找嵌入的 js,除非您明确设置它们,否则它无法知道从嵌入资源中获取它。 check this

标签: c# wpf webbrowser-control


【解决方案1】:

在您的应用程序中,您的 WebBrowser 加载一个 HTML 页面。该页面来自资源,此时无所谓。 现在 webbrowser 想要呈现您的页面并解析 HTML。在解析它时,它知道它必须加载另一个“文件”js/test.js,我假设它也存储在您的资源中。 您的 webBrowser 不知道他需要从资源中加载 js/test.js,我认为他正试图以某种方式发送 HTTP 请求,这将失败。

简答:不要将嵌入的资源用于相互链接的 HTML 文件:您实例化的 webBrowser 将无法在它们之间导航

【讨论】:

  • 感谢您的回复! ,我认为是问题所在,那么,WebControl 不支持嵌入式资源?
  • webControl 可以加载流,因此也可以加载来自您的嵌入式资源的流(这就是您现在正在做的事情)。但是 webControl 的工作是处理 HTML,而在 HTML 中你没有办法说“从 myResource 加载这个”。也许您可以制定 webControl,拦截 Navigate 事件(可能是 beforeNavigate?)并处理它们以提供您的内部结果。但实际上,我认为你是在强迫 webbrowser 控件以它不应该工作的方式工作
猜你喜欢
  • 2012-04-13
  • 2013-11-15
  • 2011-10-30
  • 1970-01-01
  • 2014-03-03
  • 2011-03-03
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
相关资源
最近更新 更多