需要修改页面的基本 URL。这告诉浏览器页面应该出现在哪里。首先,这可以通过使用 HTML基本标记来执行。这可以快速插入到 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标签的 HTML,以及完全缺少head标签的 HTML 将在搜索中失败,并且将简单地在开头插入基本标签。是的,理想情况下,代码应该检查带有属性定义的head标签。
上述代码将在(Win7 + .NET 4 WPF)系统上正确获取相对 URL 图像。但是,它仍然存在 JavaScript 问题。我找不到合适的解决方案来类似地为所有引用的 JS 文件设置 JavaScript 基本 URL。但是,对于我的桌面应用程序,简单地抑制 JS 错误就足够了(我正在显示已修改/注释的静态页面)。可以使用此处的答案执行此抑制。由于这直接与底层浏览器 COM 对象对话,我怀疑它是否适用于 WP7。