我在本地读取html文件,但这些“.html”文件在内部划分,其中包含forme“file.html#xxxxx”。 我在webbrowser上显示这些文件,但它不接受由于“#”而给出的路径
我正在阅读一本epub书,它的章节在内部被“#”分割,在解析之后我得到每个章节它自己的分区,这个分区用#表示。
这是一个分裂的例子
<navMap>
<navPoint id="np-1" playOrder="1">
<navLabel>
<text>YOUR NATIONAL PARKS BY ENOS A. MILLS</text>
</navLabel>
<content src="@public@vhost@g@gutenberg@html@files@42248@42248-h@42248-h-0.htm.html#pgepubid00000"/>
<navPoint id="np-2" playOrder="2">
<navLabel>
<text>PREFACE</text>
</navLabel>
<content src="@public@vhost@g@gutenberg@html@files@42248@42248-h@42248-h-0.htm.html#pgepubid00001"/>
</navPoint>
<navPoint id="np-3" playOrder="3">
<navLabel>
<text>CONTENTS</text>
</navLabel>
<content src="@public@vhost@g@gutenberg@html@files@42248@42248-h@42248-h-0.htm.html#pgepubid00002"/>
</navPoint>
</navMap>
并显示:
navPoint = toc.NavMap[0];
string srcContent = navP.Src;
webBrowser1.Source= path+srcContent
答案 0 :(得分:0)
我希望尽可能保持答案清晰,所以我完全重写了答案。我相信你需要做这些步骤:
Navigating
和DocumentCompleted
#
结果可能如下所示。请注意,这不是复制和粘贴代码,我只是想让您了解如何完成您所追求的目标。您需要根据需要修改此代码!
假设请求的网址为myFile.html#customAnchor
webBrowser1.Navigating += new WebBrowserNavigatingEventHandler(webBrowser1_Navigating);
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
if (e.Url.Contains("#")
{
string[] urlParts = e.Url.Split('#'); // split the string by character #
string newUrl = urlParts[0]; // = myFile.html
_somePrivateField = urlParts[1]; // = customAnchor
webBrowser1.Navigate(new Uri(newUrl));
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
HtmlElementCollection elements = this.webBrowser1.Document.Body.All;
foreach(HtmlElement element in elements){
string nameAttribute = element.GetAttribute("Name");
if(!string.IsNullOrEmpty(nameAttribute) && nameAttribute == _somePrivateField){
element.ScrollIntoView(true);
break;
}
}
}
实际上没有尝试过这个,但我希望这会帮助你解决问题。