2013-03-20 210 views
-1

我在本地讀取了html文件,但是這些「.html」文件在內部被分割爲具有格式「file.html#xxxxx」。 我在網頁瀏覽器上顯示這些文件,但它不接受由於「#」給出的路徑閱讀.html#XXX並在網頁瀏覽器上顯示

我正在閱讀epub書籍,其章節由「#」內部劃分,解析後爲每個章節獲取它自己的分區,這個分區用#表示。

這是師

<navMap> 
    <navPoint id="np-1" playOrder="1"> 
     <navLabel> 
     <text>YOUR NATIONAL PARKS BY ENOS A. MILLS</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00000"/> 
     <navPoint id="np-2" playOrder="2"> 
     <navLabel> 
      <text>PREFACE</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00001"/> 
     </navPoint> 
     <navPoint id="np-3" playOrder="3"> 
     <navLabel> 
      <text>CONTENTS</text> 
     </navLabel> 
     <content src="@[email protected]@[email protected]@[email protected]@[email protected]@42248-h-0.htm.html#pgepubid00002"/> 
     </navPoint> 
</navMap> 

和顯示器的爲例:

navPoint = toc.NavMap[0]; 
string srcContent = navP.Src; 
    webBrowser1.Source= path+srcContent 
+1

這是很不清楚你有什麼問題。你想展示什麼,在哪裏,哪些不起作用? – Oded 2013-03-20 20:42:06

+0

我想顯示由# – sansa 2013-03-20 20:44:11

+0

指示的html的部分內容你試過了什麼?你用什麼來解析HTML?一般來說,我不認爲這是可能的,除非不同部分的結構相似。 – Oded 2013-03-20 20:45:21

回答

0

我想保持的回答儘可能乾淨,所以我完全重寫了答案。我相信你需要做以下步驟:

  • 訂閱稱爲NavigatingDocumentCompleted
  • 使用代碼來解析URL的活動,並通過#
  • 覆蓋導航分裂,並給了web瀏覽器的新沒有錨點的乾淨的URL
  • 將錨點存儲在變量中例如
  • 在文件加載後,只需找到錨點引用的元素並滾動到它即可

結果可能如下所示。請注意,這不是一個複製&粘貼代碼,我只是想給你一個想法如何完成你的事情。您需要修改此代碼以滿足您的需求!

假設所請求的URL是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; 
     } 
    } 
} 

還沒有真正嘗試過這一點,但我希望這將有助於你足夠的解決您的問題。

+0

你能多解釋一下嗎 – sansa 2013-03-20 20:44:44

+0

這是相當無意義的。它並沒有真正回答這個問題(在HTML中你會找到這些'#'來解析?)。 – Oded 2013-03-20 20:46:09

+0

@ sansa.med,我剛剛更新了答案。 – walther 2013-03-20 20:48:18