有没有办法阻止此代码每次打开一个新的浏览器窗口?

时间:2011-07-01 01:18:58

标签: c# .net

Process.Start(url);

每次执行此代码时,我的浏览器都会显示一个新标签,显示网址的内容。 有没有办法防止“新标签”行为并且每次都在同一个标​​签/窗口中打开?

(出于安全原因,我宁愿不使用WebBrowser控件。)

我正在构建一个桌面应用程序:不是ASP.NET

5 个答案:

答案 0 :(得分:2)

我不相信你的应用程序可以做到这一点(至少以任何直接的方式)。当您要求系统通过Process.Start启动进程时,由目标应用程序(在本例中为浏览器)决定如何处理请求。因此,为此,可能需要调整浏览器中的某些设置(例如,Chrome)本身。

答案 1 :(得分:1)

据我所知,不。

Process.Start()创建一个新的进程服务器端,并执行您作为参数提供的任何命令。大多数浏览器都认为这会破坏当前正在运行的进程,从而破坏安全性。

我在这里假设您正在使用ASP.NET和Web浏览器,所以我建议您应该寻找一个客户端解决方案来打开一个新标签。

<script type="text/javascript">
  function runsomestuff() {
    document.getElementById('mylink').click();
  }
</script>

<body onload="runsomestuff">
 ... 
 <a href="some url" target="_blank" id="mylink" style="display: none;">content of the anchor</a>
</body>

请注意,此代码尚未经过测试。通过对链接使用onclick,您强制客户端浏览器确认链接的目标。然后浏览器可以理清它将如何显示该链接(大多数将显示一个新选项卡,但其他人(IE6)将始终打开一个新窗口。

请专门发布更多代码,以便我们了解您要实现的目标。

答案 2 :(得分:1)

可能会杀死进程并且每次都重新开始。

您应该能够为将来的呼叫保留PID。

答案 3 :(得分:1)

以这种方式执行URL时,您要求Shell为您执行此操作。这意味着shell确定了什么浏览器,并根据浏览器注册将其交给它。通常这意味着打开一个新窗口,但这取决于接收URL的应用程序。

如果要控制此默认行为,则需要从注册表中读取URL处理程序的内容,然后针对每个浏览器类型实现处理例程,这些例程可以找到窗口并告诉它导航。

如果这很烦人,那么我建议使用WebBrowser控件制作自己的迷你浏览器。我不确定你在这里有什么安全问题(因为它只是使用IE) - 随意分享它们。

修改
想一想 - 默认行为(对于IE atleast)窗口id是任何命名目标都将在同一窗口中重用。因此,只需打开一个HTML页面,在命名窗口中打开目标URL,然后关闭临时HTML框架的窗口。有点像重定向服务,它以某个窗口名称为目标。

不太确定,但是本地HTML文件可能有权使用window.open(url,'name'......

之类的东西在JS中打开弹出窗口

答案 4 :(得分:0)

简而言之,我不得不说不,并强烈反对。如果您真的想要实现这一点,您可能需要考虑市场上的每个Web浏览器,因为您必须将命令行参数传递给应用程序,并且我确信每个Web浏览器在这方面都不一样。

Process.Start(“http://www.someurl.com”)将启动用户默认的Web浏览器,因此它可能不是Internet Explorer。此外,当程序打开网页而没有询问时,很多人鄙视

甚至更多,如果你完成了这个任务你想要的,以后用户确实使用那个网页浏览器来做一些重要的事情,那就是你存储使用的标签/窗口,你仍然会远离那些重要的数据。您可以控制您的程序执行的操作,但绝大多数情况下不是用户,这是您必须考虑的事项。