従業員の反復的なタスクを保持するため、アプリケーションで Web ブラウザーを使用する必要がありますが、アンカーをクリックした後に IE で新しいウィンドウを開く javascript に問題があります。開きたい場所で「新しいウィンドウを開く」ように Web ブラウザ コントロールに指示するにはどうすればよいですか? たとえば、他の Web ブラウザ コントロールでは?
4 に答える
うまくいく簡単な解決策を見つけました。
private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
e.Cancel = true;
WebBrowser1.Navigate(WebBrowser1.StatusText);
}
チェックアウト:ソース コードを使用した .NET System.Windows.Forms.WebBrowser モジュールの概念実証
そのコントロールに関する私の経験から、この問題は次のステップで解決できるというビジョンが得られました。
常にNewWindowイベントをキャンセルする
すべてのリンクのクリックをキャッチ
ただし、すべてのリンクをこの方法でキャッシュできるわけではないため、 Document Loading Completion
<a>
ですべてのタグを手動で解析することにしました。一般に、この制御は非常に不十分であり、Microsoft によって意図的に行われています。ただし、 Webrowser.Document.HtmlDocumentと名前空間MSHTMLには強力なツールセットがあります。
-
foreach(HtmlElement tag in webBrowser.Document.All) { switch (tag.TagName.ToUpper) { case "A": { tag.MouseUp += new HtmlElementEventHandler(link_MouseUp); break; } } } void link_MouseUp(object sender, HtmlElementEventArgs e) { HtmlElement link = (HtmlElement)sender; mshtml.HTMLAnchorElementClass a = (mshtml.HTMLAnchorElementClass)link.DomElement; switch (e.MouseButtonsPressed) { case MouseButtons.Left: { if ((a.target != null && a.target.ToLower() == "_blank") || e.ShiftKeyPressed || e.MouseButtonsPressed == MouseButtons.Middle) { // add new tab } else { // open in current tab } break; } case MouseButtons.Right: { // show context menu break; } } }
最初のリンクで詳細を参照してください。これはメイン ウィンドウのソース コードです。さまざまな操作が行われています。
なぜそんなに複雑な答えをするのですか?アバティシェフ、あなたの脳内を見てみたいのですが、興味深いはずです...
これを試してみてください:
Private Sub WB1_NewWindow(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles WB1.NewWindow
newUrl = WB1.Url.ToString
e.Cancel = True
WB1.Navigate(newUrl)
End Sub
これで、2 行目を WB2 または独自のフォームの他の WebBrowser コンポーネントに変更できます。
ケースにエラーがありますMouseBUttons.Left
:
エラー 1 コントロールは、1 つのケース ラベル ('ケース 1048576:') から別の C:\Documents and Settings\ever\My Documents\Visual Studio 2005\Projects\Desarrollo\wApp_SurverMonkey\wApp_SurverMonkey\frmNetcare.cs 64 17 wApp_SurverMonkey にフォールスルーできません