【问题标题】:Open local html file from link in page loaded in WebBrowser从 WebBrowser 中加载的页面中的链接打开本地 html 文件
【发布时间】:2020-01-18 16:34:03
【问题描述】:

我有一个 WebBrowser 控件,用于显示具有不同信息的动态生成的 html 页面,包括 html 链接。使用 webBrowser.DocumentText 加载页面。

如果我包含指向外部网页的链接,例如“https://somesite.com/file.htm”链接工作正常,但如果我链接到本地​​文件,例如“file:///c:\temp\file.htm”,当我单击链接时没有任何反应。

如果我从 WebBrowser 控件中的页面中获取源代码,将其保存为 html 文件并在 Edge 中打开,则链接可以正常工作。

我一直在浏览大量网页试图找到解决方案,但没有运气,它们似乎都没有解决这个我觉得奇怪的特定问题,因为这似乎是一个常见问题。

   string htmlCode = "<html><body><a href=\"file:///c:\\temp\\testlink.htm\">link</a></body></html>";
        webBrowser1.DocumentText = htmlCode;

【问题讨论】:

    标签: c# webbrowser-control


    【解决方案1】:

    如果您提供了一个能够重现您所看到的问题的示例,将会更有帮助,但这是一种方法。

    下面的代码写入了两个文件:start.html,其中包含指向第二个文件end.html 的可点击链接,其中仅包含一些文本。

    将 webbrowser 控件拖放到表单上并运行代码。第一个页面将加载一个您可以单击的链接,当您单击它时,将加载第二个页面。

    public Form1()
    {
        InitializeComponent();
    
        // Modify these with paths on your machine
        var startPage = @"f:\private\temp\start.html";
        var endPage = @"f:\private\temp\end.html";
    
        // This will write the contents of the files above (so they exist)
        File.WriteAllText(startPage, $"<a href=\"file:///{endPage}\">Click Here</a>");
        File.WriteAllText(endPage, "You did it!!");
    
        // Navigate to the first file so you can click the link
        webBrowser1.Navigate(startPage);
    }
    

    【讨论】:

    • 谢谢,是的,我知道你可以这样做,但我试图避免这种解决方法。 WebBrowser真的没有办法直接打开本地文件吗?
    • 什么意思? Navigate 方法直接打开一个本地文件。
    • 它正在加载本地文件以启动,然后再次单击链接
    • 好吧,我必须在打开它之前将包含链接的 html 代码保存到磁盘,而不是使用 webBrowser.DocumentText 从字符串加载它。并且数据需要加密,这意味着在保存到磁盘时加密,然后在读取时再次解密。总而言之,它会降低性能。
    • 此外,WebBrowser.Navigate() 无法解析磁盘上的文件,因为它是加密的,它只会显示加密的字符串。因此,除非有一种方法可以加密 WebBrowser 可以自动解密的文件(SSL/TLS?),否则它将无法工作。
    猜你喜欢
    • 1970-01-01
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2020-06-10
    • 2023-04-07
    • 2018-07-20
    • 1970-01-01
    相关资源
    最近更新 更多