2011-07-01 7 views
3
Process.Start(url); 

毎回、私はURLの内容を示す、私のブラウザで新しいタブを取得します。 「新しいタブ」の動作を防ぎ、毎回同じタブ/ウィンドウで開く方法はありますか?このコードが毎回新しいブラウザウィンドウを開くのを止める方法はありますか?このコードが実行される

(私はセキュリティ上の理由から、Webブラウザーコントロールを使用しないでしょう。)

私はデスクトップアプリケーション構築しています:ないASP.NET

+0

+1:新しいウィンドウでブラウザを開くアプリケーションが常に嫌いでした。 –

+0

ユーザーのタブを上書きすることをお勧めします。あなたが殺したばかりのタブで何か重要なことがあるかもしれません。送信されていないメールや、フォームがいっぱいになっているかもしれません。新しいウィンドウを避けたいのですが、新しいタブを開くことは完全に合理的です。私のテストに基づいて、それはほとんどのブラウザが行うものです。 –

+0

Hmm。これはウェブアプリケーションではなく、それは私が提案したものではありません:)最初の機会に新しいウィンドウ/タブを開き、続いてそのタブを使用するように、毎回同じ名前のウィンドウで開きたいと思います。 – Tom

答えて

2

を私は(それを行うことが可能であるとは考えていませんあなたのアプリケーションから少なくとも直接的な方法で)。 Process.Start経由でプロセスを開始するようにシステムに依頼すると、要求をどのように処理するかは、対象のアプリケーション(この場合はブラウザ)によって決まります。そのためには、ブラウザ(Chromeなど)自体の設定を調整する必要があります。私が理解することができるものから、

+0

それは私が疑うものです。私は 'url = @"のようなトリックを試してきました。javascript:void(window.open( '"+ url +"'、 'win')); "; - firefoxには何の不運もありません – Tom

+0

@Tom:現在作業中ですいくつかのアプリケーションでは、いろいろな理由からProcess.Start(または同等のもの)を使用し、それらはすべて私のブラウザで新しいタブを起動します。そして私はいくらか迷惑をかけるが解決策を見いださなかった。だから私は私の答えが間違っていると思っています。良い解決策を見いだすのがいいでしょう。 –

1

、ありません。

Process.Start()は、新しいプロセス・サーバー側を作成し、それを引数として与えることどんなコマンドを実行します。ほとんどのブラウザーは、カレントに実行中のプロセスを危険にさらすためのセキュリティ違反と見なします。

私はあなたのASP.NETとWebブラウザを使用しているので、私はあなたが新しいタブを開くには、クライアント側のソリューションを探す必要があることをrecommentだろうとここに仮定しています。

<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)は常に新しいウィンドウを開きます)。

もっと具体的なコードを投稿してください達成しようとしている。

+0

あなたの役に立つコメントをありがとう。しかし、私はデスクトップアプリケーションを構築しています。私はこれを質問に加えました。 – Tom

+0

実際には、winforms POVからProcess Start Infoを使用し、そこから引数をProcess.Startに渡すことができます。 [http://msdn.microsoft.com/en-us/library/0w4h05yb.aspx](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) –

+0

はい私はそれを試みた。ブラウザが最初に閉じられた場合、process.startから返されたプロセスへの参照を保存し、新しいものを開始する前にそのプロセスを終了することができます。しかし、これはさまざまな理由でうまく機能しません。 – Tom

1

をプロセスを強制終了し、毎回再起動することができる。

をあなたが将来の呼び出しのためのPIDを維持することができるはずです。あなたが求めている方法URLを実行

+0

ブラウザは元々閉じられていなければならないので、このような仕組みはうまくいきません。そして毎回。それは遅く、信頼性が低くなります。 – Tom

1

シェルはあなたのためにそれを行うことを意味します。シェルがどのブラウザーを決定し、ブラウザーの登録に従ってそれを渡すかを意味します。これは新しいウィンドウを開くことを意味しますが、それはアプリケーションがURLを受け取るまでです。

あなたはURLハンドラがレジストリからあるものを読む必要があり、このデフォルトの動作の制御を取りたい場合は、各ブラウザの種類のためのウィンドウを見つけてナビゲートするためにそれを伝えることができる処理ルーチンを実装します。

これは迷惑にある場合は、私が代わりにWebBrowserコントロールを使用して、独自のミニブラウザを作ることをお勧め。私はあなたがここで(IEを使用しているので)あなたがどのようなセキュリティ上の懸念を持っているか分かりません。

編集:
そういえば - デフォルトの動作(IEの少なくとも用)のウィンドウIDは、任意の名前のターゲットが同じウィンドウ内で再利用されるということです。したがって、名前付きウィンドウで目的のURLを開くHTMLページを開き、一時的なHTMLフレームのウィンドウを閉じます。特定のウィンドウ名を対象とするリダイレクトサービスのような並べ替え。

本当に確かに、しかし、ローカルHTMLファイルは、window.open(urlには、「名前」のようなものを使用して経由でJSのポップアップを開く権限を持っているかもしれません...要するに

+0

これは最も有用な答えです。実際、私はWebBrowserコントロールを使用して終了しました。しかし、私はオープンをHTMLページのアプローチと考えましたが、それは自動的に閉じることで問題を提示します。なぜなら、Webページはユーザーのやりとりでのみ閉じられるからです。 – Tom

+0

私のセキュリティ上の懸念は、何年にもわたって抱えていたすべての脆弱性に基づくIEの恐れに過ぎません。特定のものはありません。それはロードされている '野生の中の'ウェブページであるので、ちょうど慎重になりたい。しかし、そこに私の質問への本当の答えと思われるので、私は多くの選択肢を持っていませんでした。おそらく私は私のメインIEでスクリプトを無効にすることができ、これはWBコントロールに引き継がれます。 – Tom

0

ない、私が言っているでしょうあなたが本当にこれを達成したいのであれば、アプリケーションにコマンドラインパラメータを渡さなければならないので、各Webブラウザを市場で検討したいと思うでしょう。私は各Webブラウザがその点で同じではありません。

Process.Start( "http://www.someurl.com")はユーザーのデフォルトWebブラウザを起動するため、Internet Explorerではない可能性があります。さらに多くの人々蔑むは、プログラムが尋ねることなくWebページを開くときに表示されます。

このタスクを達成し、後でユーザーが重要な目的でそのWebブラウザーを使用した場合でも、使用するために保存したタブ/ウィンドウは、それでも重要なものから遠ざかりますデータ。あなたはあなたのプログラムが何をしているのかを支配していますが、もっとも確かにユーザーではなく、あなたが説明しなければならないものです。

関連する問題