Ejemplo n.º 1
0
        /// <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;
        }