【问题标题】:URLs in RSS feeds beginning with "//" not loading in WebBrowser control以“//”开头的 RSS 提要中的 URL 未在 WebBrowser 控件中加载
【发布时间】:2018-02-13 06:39:05
【问题描述】:

我正在开发一个基于 WindowsForm 的 RSS 聚合器作为一个爱好项目。我在显示来自 webbrowser 控件中包含 html 的 RSS 提要的描述时遇到了问题。

导致我遇到问题的描述示例:

"<img border=\"0\" src=\"//images10.newegg.com/NeweggImage/ProductImageCompressAll125/14-487-346-Z01.jpg\" width=\"125\" height=\"94\" title=\"\" alt=\"\">

问题是img src。如果我在它前面添加http:,它会很好地加载图像。否则,我会得到一个 x 框,而不是你可以玩游戏的那种。

解决方法是解析每个描述并在任何必要的地方添加http: 字符串,但这似乎有很多不必要的编码,而且每个提要都会有所不同。

有没有更好的方法来显示使用 html 格式的 RSS Feed 数据,或者有没有办法通过 webbrowser 控件解决上述问题?

【问题讨论】:

  • 通常,当源文件以 // 开头时,这意味着可以通过 httphttps 提供特定文件。解析时,当前协议通常由网络浏览器附加。例如,当您在安全页面https://www.example.com 上时,该资源将被读取为https://images10.newegg.com/NeweggImage/ProductImageCompressAll125/14-487-346-Z01.jpg,而在非安全页面http://www.example.com 上,它将被读取为http://images10.newegg.com/NeweggImage/ProductImageCompressAll125/14-487-346-Z01.jpg

标签: c# html winforms rss


【解决方案1】:

如何显示 HTML 格式的 RSS Feed 数据?

我不确定是否有办法。


有没有办法通过 webbrowser 控件解决上述问题?

您可以使用 jquery 轻松解析所有在 http: 前面的 img src 属性:

$(function() {
    $('img').attr('src', function(index, src) {
       return 'http:' + this.getAttribute('src');
    });
});

【讨论】:

  • 我不喜欢这个答案,因为你基本上重复了他的问题,他们已经在前面加上http,他们正在寻找更好的方法来做到这一点。虽然我不会反对它,因为它可能是某些人所需要的。
  • 亲爱的@ImaBrokeDude,这不是聊天网站。我们是一群专业的程序员。请注意我如何引用 OP 来在线回答多个问题。 OP要求解决方案。下次评论前请仔细阅读。谢谢。
  • 您好,我不会将此站点视为聊天站点。你可能不喜欢我选择的名字,但我所说的是有效的。为什么要重复OP已经问过的完全相同的事情?特别是关于前置http。你可以清楚地看到他们已经这样做了。除了为给定问题指定的语言之外的答案步骤之外,为什么用户应该使用 javascript 来解析 C# 字符串?
  • @ImaBrokeDude:我对此保持中立,但为了清楚起见和学习,他对 jQuery 的使用是有效的。 jQuery 虽然与 c# 和 WinForms 没有直接关系,但它是为解析 HTML 元素而构建的,而 c# HTML 解析可能需要一些额外的工作。这将遵循我将在 WebBrowser 控件的文档正文中包含该 jQuery 的原因,以便动态解析 html 元素,而无需编写更复杂的 c# 解析器来修改数据,然后再将其传递给 WebBrowser 控件。杰里米·汤普森说的对吗?
  • 很公平,我可以理解。但是,是的,当您希望资源通过与网页相同的协议加载时,您可以从 url 中删除协议,以便浏览器解析资源链接并附加正确的协议。只是想确保让您知道对 RSS 提要是否来自 httphttps 保持敏感。见RFC 3986: "Uniform Resource Identifier (URI): Generic Syntax", Section 4.2.
【解决方案2】:

由于所讨论的 URL 没有附加协议,它将被视为相对 URL,但显然不会显示本地资源。 Moresubject

您可以通过使用Determine if Absolute or Relative URL 中描述的解决方案以及尝试将http: 粘贴在源src 上以防失败,然后重试来缓解这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-07
    • 1970-01-01
    相关资源
    最近更新 更多