在WP7中使用webBrowser.NavigatetoString()加载带有图片引用的内容

3
我想使用WPF WebBrowser对象的NavigateToString方法将HTML内容加载到其中。HTML内容包含相对路径(*)。我如何设置WebBrowser的基本URL,以便正确加载所有图像、JavaScript等内容?
(*)我编辑了一个未回答的现有问题,以使其更加自我解释。我不知道原始用户的应用程序;但我正在获取HTML,修改它(对文本部分应用高亮显示);然后尝试使用.NET 4中的WPF WebBrowser显示它。也许一种方法是向字符串添加HTML前缀?
1个回答

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错误就足够了(我显示已修改/注释的静态页面)。可以使用此答案执行此抑制。由于这直接与底层浏览器COM对象交互,我怀疑它不能与WP7一起工作。

winwaed 这在 Windows Phone 8 上可行吗? - shefintk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接