9

従業員の反復的なタスクを保持するため、アプリケーションで Web ブラウザーを使用する必要がありますが、アンカーをクリックした後に IE で新しいウィンドウを開く javascript に問題があります。開きたい場所で「新しいウィンドウを開く」ように Web ブラウザ コントロールに指示するにはどうすればよいですか? たとえば、他の Web ブラウザ コントロールでは?

4

4 に答える 4

15

うまくいく簡単な解決策を見つけました。

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) {
    e.Cancel = true;
    WebBrowser1.Navigate(WebBrowser1.StatusText);
}
于 2012-07-09T18:37:35.283 に答える
5

チェックアウト:ソース コードを使用した .NET System.Windows.Forms.WebBrowser モジュールの概念実証


そのコントロールに関する私の経験から、この問題は次のステップで解決できるというビジョンが得られました。

  1. 常にNewWindowイベントをキャンセルする

  2. すべてのリンクのクリックをキャッチ

  3. ただし、すべてのリンクをこの方法でキャッシュできるわけではないため、 Document Loading Completion<a>ですべてのタグを手動で解析することにしました。

  4. 一般に、この制御は非常に不十分であり、Microsoft によって意図的に行われています。ただし、 Webrowser.Document.HtmlDocumentと名前空間MSHTMLには強力なツールセットがあります。

  5. 使用例はHtmlElement.DomElement です

    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;
        }
      }
    }
    

最初のリンクで詳細を参照してください。これはメイン ウィンドウのソース コードです。さまざまな操作が行われています。

于 2009-03-31T16:28:23.460 に答える
0

なぜそんなに複雑な答えをするのですか?アバティシェフ、あなたの脳内を見てみたいのですが、興味深いはずです...

これを試してみてください:

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 コンポーネントに変更できます。

于 2011-03-29T12:04:52.643 に答える
-1

ケースにエラーがあります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 にフォールスルーできません

于 2010-02-05T01:28:18.943 に答える