在WP7中使用带有图像引用的webBrowser.NavigatetoString()

时间:2013-05-27 11:54:04

标签: .net wpf browser

我想使用它的NavigateToString方法将HTML内容加载到WPF WebBrowser对象中。 HTML内容包含相对路径(*)。如何设置WebBrowser的基本URL以便正确加载所有图像,JavaScript等?

(*)我编辑了一个现有的,未回答的问题,使其更加自我解释。我不知道原始OP的应用程序;但我正在获取HTML,修改它(将高亮显示应用于文本部分);然后尝试使用.NET 4中的WPF WebBrowser显示它。也许一种方法可能是在字符串中添加HTML前缀?

1 个答案:

答案 0 :(得分:3)

需要修改页面的基本URL。这告诉浏览器页面应该出现在哪里。首先,可以使用HTML base 标记执行此操作。这可以在HTML的开头快速插入,大多数浏览器可能会读它没问题,虽然它不是正确的HTML。相反,理想情况下应将其插入标题部分( head 标记)。

这是一些不太优雅的C#代码:

    /// <summary>
    /// Insert a base href tag into the header part of the HTML
    /// If a head tag cannot be found, it is simply inserted at the beginning
    /// </summary>
    /// <param name="input_html">The HTML to process</param>
    /// <param name="url">URL for the base href tag</param>
    /// <returns>The processed HTML</returns>
    static private string InsertBaseRef(string input_html, string url)
    {
        string base_tag = "<base href=\"" + url + "\" />"; //  target=\"" + url + "\" />";
        Regex ItemRegex = new Regex(@"<head\s*>", RegexOptions.Compiled | RegexOptions.IgnoreCase);

        Match match = ItemRegex.Match(input_html);
        if (match.Success)
        {
            // only replace the first match
            return ItemRegex.Replace( input_html, match.Value + base_tag, 1 );

        }

        // not found, so insert the base tag at the beginning
        return base_tag + input_html;            
    }

请注意,这仅搜索没有任何属性的简单 head 标记。带有 head 标记且具有属性的HTML以及完全缺少 head 标记的HTML将在搜索中失败,而 base 标记将会只需在开头插入即可。是的,理想情况下,代码应检查带有属性定义的 head 标记。

上述代码将在(Win7 + .NET 4 WPF)系统上正确获取相对URL图像。但是它仍然存在JavaScript问题。我找不到一个适当的解决方案来类似地为所有引用的JS文件设置JavaScript基本URL。但是,对于我的桌面应用程序,只需抑制JS错误即可(我正在显示已修改/注释的静态页面)。可以使用answer here执行此抑制。由于这直接与底层浏览器COM对象进行对话,我怀疑它是否适用于WP7。