【问题标题】:How to open a link into the same browser window or tab from Process.Start?如何从 Process.Start 打开指向同一浏览器窗口或选项卡的链接?
【发布时间】:2014-12-30 23:18:50
【问题描述】:

我正在尝试从 Windows 窗体上的 LinkLabel 打开浏览器窗口。单击时,控制权传递给 LinkClicked 事件,代码使用以下命令调用默认浏览器:

System.Diagnostics.Process.Start("http://www.google.com");

我希望能够单击该链接(即多次运行“开始”),但只能进入同一个浏览器窗口或选项卡。当然,多次点击每次都会向 Google 打开一个新标签。我知道如何使用如下链接指定命名窗口:

<a href="http://www.google.com" target="googlewin">Click Here!</a>

但是如何在 Start 命令中执行此操作?

预计到达时间:我在“关于”表单上单击了 Internet Explorer 自己的可链接链接,每次都会打开一个新窗口,所以可能连微软都做不到。嗯。

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    对于 Internet Explorer,您可以使用 SHDocVw 程序集执行此操作。

    不要使用 process.start,只需创建一个 SHDocVw.InternetExplorer 实例,并使用它在您想要的任何时候在同一浏览器中导航。这是一个简单的例子。

    private SHDocVw.InternetExplorer IE;
    
    private void Form1_Load(object sender, EventArgs e)
      {
         IE = new SHDocVw.InternetExplorer();
         IE.Navigate("http://stackoverflow.com/");
         IE.Visible = true;
      }
    
    private void button1_Click(object sender, EventArgs e)
      {
         IE.Navigate("http://google.com/");
      }
    

    如果您特别希望使用 Process.start,那么对于 Internet Explorer,您可以遍历 SHDocVw.ShellWindows 以找到您希望用于导航的 Internet Explorer。

    foreach (SHDocVw.InternetExplorer IE in new SHDocVw.ShellWindows()) {
        if (IE.FullName.ToLower.Contains("iexplore") & IE.LocationURL.ToLower.Contains("someurl")) {
            IE.Navigate("http://google.com/");
        }
    }
    

    【讨论】:

      【解决方案2】:

      Ditch Process.Start:很可能无法完成。可执行文件需要支持允许您选择选项卡并执行导航的命令行选项。我在任何浏览器中都看不到任何此类支持:Chrome; IEFirefox

      我能想到的唯一合理的选择是使用已发布的互操作机制来处理浏览器窗口。一旦有了浏览器窗口,就可以编写脚本来设置窗口位置。使用这种方法,您需要使用WebBrowser 控件或Awesomium 之类的控件。

      【讨论】:

      • 如果使用 Process.Start 无法做到这一点,那么也许您可以这么说?我不使用 WebBrowser 控件是有原因的——那是我的第一选择。我正在使用浏览器控件转到具有具有 Google 地图功能的 IFrame 的网页。它的作用是抛出两个 JavaScript 错误。这就是我试图在 Winform 之外打开浏览器窗口的原因。
      • 另外,JS 错误在托管窗口的课程中很常见,我通常只是忽略它们,一切正常。
      【解决方案3】:

      我觉得你的方法是错误的。

      单击时,控制权传递给 LinkClicked 事件,代码调用默认的>浏览器使用:

      实际上,它不会调用默认浏览器,而是创建默认浏览器的新实例。是的,您可以获得新创建的进程的句柄并使用一种相当复杂的方式来添加更多选项卡,但这种做法将是重新发明轮子。最好的办法是创建自己的 WebBrowser 控件。 Process.Start 是一种创建新进程的方法,不应用作更改已运行进程的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-20
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多