【问题标题】:C# Open URL targeting a specific tab针对特定选项卡的 C# 打开 URL
【发布时间】:2020-09-18 18:33:59
【问题描述】:

我有一个 C# WinForms 应用程序,它具有对 Web 应用程序的点击功能。 在 C# 应用程序中,每当有人单击 Campaign#123 的链接时,我希望它在同一个浏览器选项卡(#123 的选项卡)中打开。当他们点击 Campaign#456 的链接时,我希望它在不同的选项卡(#456 的选项卡)中打开。

在 HTML 中,您可以像这样使用 target=framename 选项指定选项卡。这正是我想要的:-

<a target=456 href="https://www.w3schools.com">Visit W3Schools</a>

那么如何将“target=456”部分传递给 Process.Start() 接口?还是我应该使用其他接口来打开带有目标的 URL?

System.Diagnostics.Process.Start(url);

谢谢

【问题讨论】:

  • 我不认为这可以做到,但我不是 100% 确定。一种选择是在应用程序中呈现 HTML 页面,而不是与外部浏览器交互。也许考虑ultralig.ht 或类似的替代方案。
  • 谢谢艾米。我以前做过这种事情,但是这个 HTML 来自我不拥有的应用程序,所以我无法更改它的实现方式。我只需要提供它的链接。

标签: c# url


【解决方案1】:

使用System.Diagnostics.Process.Start(url),您要求操作系统为给定的 HTTP(S) URL(“协议处理程序”)打开关联的应用程序。您不知道注册了哪个关联应用程序,也不知道它如何支持将目标名称与 URL 一起传递,更不用说我所知道的支持该功能的浏览器了(Chrome for one doesn't,它是 lacks a --target command-line switch)。

您可以做的是将目标 URL 和目标传递给一个小网页,该网页会打开链接并自行关闭:

<!DOCTYPE html>
<html>
  <body>
    <a id="theLink"></a>
  </body>
  <script type="text/javascript">
    // https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
    function getParameterByName(name, url) {
        if (!url) url = window.location.href;
        name = name.replace(/[\[\]]/g, '\\$&');
        var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
            results = regex.exec(url);
        if (!results) return null;
        if (!results[2]) return '';
        return decodeURIComponent(results[2].replace(/\+/g, ' '));
    }
    
    var anchor = document.getElementById("theLink");
    
    anchor.target = getParameterByName("target");
    anchor.href = getParameterByName("href");
    anchor.title = getParameterByName("title");
    anchor.innerText = anchor.title;

    // Go there
    anchor.click();
    
    // Close us
    window.close();
  </script>
</html>

现在您可以将其称为openintarget.html?href=http://google.com&amp;target=1234&amp;title=Foo

但是,浏览器不喜欢此页面的功能。首先,您必须接受它可以显示弹出窗口(它不能,但可能是生成链接并单击它的代码的总称)。接下来,您无法从 JavaScript 中关闭一个您没有从 JavaScript 打开 的选项卡,所以现在您遇到了一个新问题:适当的目标选项卡被重用,但这个 HTML 页面保持打开状态,并且更糟糕的是,专注。

所以我认为你不能这样做。也许在您的应用程序中托管 Web 浏览器是可行的?这样可以更好地控制可见选项卡。

【讨论】:

  • 谢谢,这很有帮助。不幸的是,它并不能真正满足我的需要。但我奖励你赏金似乎是公平的。感谢您精心研究的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多