/// <summary> /// /// </summary> /// <param name="contentHtml"></param> /// <param name="divertUri">Uri for WebReader redirection e.g. http://arghya.com/webreader/read?uri=</param> /// <param name="directUri">Uri for direct link to original resource e.g. http://www.facebook.com</param> /// <returns></returns> public static string SetAbsoluteLinks(string contentHtml, string divertUri, string directUri) { HtmlDocument htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(contentHtml); var allLinks = htmlDoc.DocumentNode.SelectNodes("//*[@href or @src or @action]"); if (allLinks == null) return contentHtml; foreach (HtmlNode link in allLinks) { HtmlAttribute att = GetAttributeForLink(link); if (att != null) { string href = att.Value; //TODO: re-evaluate "link" var tagsWithOriginalLink = new[] { "img", "link", "audio", "video" }; if (tagsWithOriginalLink.Any(tag => link.OriginalName.ToLower() == tag)) //we are not good at rendering binary. yet. { if (!IsAbsoluteUri(href)) { //uri = new Uri(new Uri(baseUri), uri); att.Value = directUri + href; //uri.ToString(); } continue; } // ignore javascript on buttons using a tags if (href.StartsWith("javascript", StringComparison.InvariantCultureIgnoreCase)) continue; //if (!IsAbsoluteUri(href)) //{ // //uri = new Uri(new Uri(baseUri), uri); // att.Value = divertUri + href; //uri.ToString(); //TODO: check fix //} att.Value = IsAbsoluteUri(href) ? divertUri + href : divertUri + directUri + href; } } return htmlDoc.DocumentNode.OuterHtml; }