在开发中,有时候我们想对HTML文件进行编辑后显示,此时一般会直接调用WebBrowser的NavigateToString()方法。但是这样处理后页面中的锚点会失效,点击对应链接不会自动跳转到网页的对应位置。有两种方法可以解决这个问题。
本地读取
首先将数据存到本地,然后使用WebBrowser.Navigate()方法进行读取:
private void SaveToIsoStore(string data, string filename)
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
using (var file = isoStore.OpenFile(filename, FileMode.Create, FileAccess.Write))
{
using (var writer = new StreamWriter(file))
{
Debug.WriteLine("开始保存文件: " + filename);
writer.Write(data);
}
}
}
SaveToIsoStore(data, "data.html");
wbDetails.Navigate(new Uri("data", UriKind.Relative));
{
IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication();
using (var file = isoStore.OpenFile(filename, FileMode.Create, FileAccess.Write))
{
using (var writer = new StreamWriter(file))
{
Debug.WriteLine("开始保存文件: " + filename);
writer.Write(data);
}
}
}
SaveToIsoStore(data, "data.html");
wbDetails.Navigate(new Uri("data", UriKind.Relative));
内嵌JavaScript函数
将下列JavaScript函数嵌入到网页中:
function showIt(elID)
{
var el = document.getElementById(elID);
el.scrollIntoView();
}
{
var el = document.getElementById(elID);
el.scrollIntoView();
}
然后在WebBrowser.Navigating事件中取得锚点的ID,注册WebBrowser.LoadCompleted事件:
private void wbDetails_LoadCompleted(object sender, NavigationEventArgs e)
{
wbDetails.LoadCompleted -= wbDetails_LoadCompleted;
wbDetails.InvokeScript("showIt", anchorID);
}
{
wbDetails.LoadCompleted -= wbDetails_LoadCompleted;
wbDetails.InvokeScript("showIt", anchorID);
}
注意处理上面代码的异常,如果页面中没有showIt()函数的话会报”80020006″错误。
参考资料:
[1] Navigation to Fragment
» 转载请注明来源及链接:未来代码研究所