在开发中,有时候我们想对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));
内嵌JavaScript函数

将下列JavaScript函数嵌入到网页中:

function showIt(elID)
{
    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);
}

注意处理上面代码的异常,如果页面中没有showIt()函数的话会报”80020006″错误。

参考资料:
[1] Navigation to Fragment

» 转载请注明来源及链接:未来代码研究所

Related Posts:

Leave a Reply

World Line
Time Machine
Friendly Links
Online Tools