Process.Start(url);
每次執行此代碼時,我會在瀏覽器中顯示一個新選項卡,顯示url的內容。 有沒有辦法阻止「新標籤」的行爲,並在每次打開相同的標籤頁/窗口?有沒有辦法阻止此代碼每次打開新的瀏覽器窗口?
(我寧願不使用出於安全原因WebBrowser控件)
我建立一個桌面應用程序:不是ASP.NET
Process.Start(url);
每次執行此代碼時,我會在瀏覽器中顯示一個新選項卡,顯示url的內容。 有沒有辦法阻止「新標籤」的行爲,並在每次打開相同的標籤頁/窗口?有沒有辦法阻止此代碼每次打開新的瀏覽器窗口?
(我寧願不使用出於安全原因WebBrowser控件)
我建立一個桌面應用程序:不是ASP.NET
我不相信這是可能做到這一點(至少以任何直接的方式)從您的應用程序。當你讓系統通過Process.Start啓動進程時,它由目標應用程序(在這種情況下是瀏覽器)決定它如何處理請求。所以要做到這一點,可能需要調整瀏覽器中的某些設置(例如Chrome)本身。
這就是我所懷疑的。我一直在嘗試像'url = @「這樣的技巧:javascript:void(window.open(''+ url +'''''));」;' - 在firefox中沒有任何運氣 – Tom
@Tom:我目前在工作在幾個應用程序中,出於各種原因,使用Process.Start(或類似的東西),它們都在我的瀏覽器中啓動新的選項卡。我覺得有點煩人,但還沒有找到解決辦法。所以我想我希望我的回答是錯誤的;很高興找到一個好的解決方案。 –
從我能理解的,不。
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)會一直打開一個新窗口。)
請專門發佈一些代碼,以便我們可以看到你正在努力實現。
感謝您的有用評論。但是,我正在構建一個桌面應用程序。我已經添加了這個問題。 – Tom
實際上,從winforms POV中,您可以嘗試使用Process Start Info並將參數傳入Process.Start。 (http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx) [http:// msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.aspx](http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.aspx) –
是的,我試過。如果瀏覽器首先關閉,那麼可以將引用保存到process.start返回的進程中,然後在啓動新進程之前將其終止。但是,由於各種原因,這種方式效果不佳。 – Tom
當你執行這樣你都在問一個URL Shell爲你做,意思是shell根據瀏覽器註冊來決定瀏覽器,然後交給它這意味着打開一個新窗口,但這取決於接收URL的應用程序。
如果您想要控制此默認行爲,您需要閱讀註冊表中URL處理程序的內容,然後針對每個瀏覽器類型的實現處理例程來定位窗口並告訴其導航。
如果這是煩人的,那麼我會建議,而不是使用WebBrowser控制自己的迷你瀏覽器。我不確定你在這裏有什麼安全問題(因爲它只是使用IE) - 隨時分享。
編輯:
試想想它 - 默認行爲(IE ATLEAST)窗口的ID是任何指定的目標將在同一窗口中重複使用。因此,只需打開一個HTML頁面,在命名窗口中打開您的目標URL,然後關閉臨時HTML框架的窗口。有點像有針對某個窗口名稱的重定向服務。
不能確定,但本地的HTML文件可能有權限通過使用類似window.open(URL,「名字」,打開在JS彈出...
總之,我不得不說否,並強烈建議不要,如果你真的想完成這個,你會想要考慮市場上的每個網絡瀏覽器,因爲你必須傳遞一個命令行參數給應用程序,並且我確信每個網頁瀏覽器都是
Process.Start(「http://www.someurl.com」)將啓動用戶默認的網頁瀏覽器,因此它可能不是Internet Explorer。此外,相當多的人鄙視當一個程序打開一個網頁時沒有問。更重要的是,如果你完成了這個任務,你想怎麼做,並且用戶以後用這個網頁瀏覽器做了一些重要的事情,那麼這就是你存儲使用的標籤頁/窗口,而且你仍然會遠離那個重要的數據。您可以控制程序的功能,但絕對不是用戶,這是您必須考慮的。
+1:我一直討厭在新窗口中打開瀏覽器的應用程序。 –
我建議不要覆寫用戶的標籤,他們可能會在該標籤中顯示一些重要信息,可能是未發送的電子郵件,或者他們可能正在填寫表單。我明白如果你想避開一個新窗口,但打開一個新標籤是完全合理的。並基於我的測試,這是大多數瀏覽器所做的。 –
嗯。除了這不是一個Web應用程序,這不是我所說的:)我想每次都在同一個命名窗口中打開,以便第一次打開一個新的窗口/選項卡並隨後使用該選項卡。 – Tom