2013-05-27 19 views
3

我想使用它的NavigateToString方法將HTML內容加載到WPF WebBrowser對象中。 HTML內容包含相對路徑(*)。如何設置WebBrowser的基本URL,以便所有圖像,JavaScript等都能正確加載? (*)我編輯了一個現有的未解答的問題,使其更加自我解釋。我不知道最初的OP的應用程序;但我正在獲取HTML,修改它(將高亮應用於文本的各個部分);然後嘗試在.NET 4中使用WPF WebBrowser顯示它。也許有一種方法可能會向字符串添加HTML前綴?在WP7中使用帶有圖像引用的webBrowser.NavigatetoString()

回答

3

頁面的基本URL需要修改。這告訴瀏覽器頁面應該顯示的位置。首先,這可以通過使用HTML 基地標籤來執行。這可以快速插入到HTML的開頭,大多數瀏覽器可能會讀取它,儘管它不是正確的HTML。相反,它應該插入標題部分(標題標記)。

下面是一些不雅的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;    
    } 

注意,對於沒有任何屬性的簡單標籤這隻搜索。帶有頭部的HTML具有屬性的標記以及完全缺少頭部的HTML標記將在搜索中失敗,並且基準標記將被簡單地插入到開頭。是的,代碼應該理想地檢查具有屬性定義的標記。

上述代碼將在(Win7 + .NET 4 WPF)系統上正確提取相對URL圖像。但是它仍然存在JavaScript問題。我無法找到適當的解決方案來爲所有引用的JS文件設置JavaScript基本URL。但是,對於我的桌面應用程序,只需要抑制JS錯誤就足夠了(我正在顯示已修改/註釋的靜態頁面)。這種抑制可以使用answer here執行。由於這直接與底層瀏覽器COM對象直接對話,我懷疑它會與WP7一起工作。

+0

winwaed這可能在Windows Phone 8中嗎? – shefintk

相關問題