2009-03-31 3 views
9

私のアプリケーションでは、従業員からの反復的な作業を続けるので、Webブラウザを使用する必要がありますが、アンカーをクリックした後にIEで新しいウィンドウを開くjavascriptに問題があります。どのように私はそれを開きたいWebブラウザコントロールに "新しいウィンドウを開く"ように指示するのですか?たとえば、他のWebブラウザコントロールでは?ウェブブラウザのコントロールが強制的に同じウィンドウ内のウェブページを開くようにする方法はありますか?

+0

私はこの答えを聞くことに興味があります。しかし、コンポーネントは、新しいウィンドウを開くことをアプリケーションに通知する必要はありませんか?新しいWebBrowserコンポーネントを使用して新しいウィンドウを開く必要があります。多分イベントがありますか? –

+0

残念ながら、アンカーは "javascript:void(0)"リンクです。この問題を解決する方法はわかりません – Skuta

+0

私の投稿 – abatishchev

答えて

5

チェックアウト:proof-of-concept of .NET System.Windows.Forms.WebBrowser module usingソースコードを


そのコントロールについての私の経験は私にこの問題は、次の手順で解決することを試みたことをビジョンを与えている:

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

  2. catch all linksクリックすると

  3. が、すべてのリンクは、このようにキャッシュすることができるので、私は一般的にDocument Loading Completion

  4. に手動ですべてのタグ<a>を解析することを決定していない、このコントロールが非常に悪く、故意に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; 
        } 
        } 
    } 
    

は、最初のリンクでより参照され、それがメインウィンドウのソースコードがあります、ありますそこにさまざまな操作の多く!

+0

を編集しました。 – Skuta

+0

dotbrowser javascript、shiatで動作しません – Skuta

+0

クールなAにURLがありますが、それを解析してonclickの一部にする必要があります。すばらしいです。ありがとうございます – Skuta

-1

場合MouseBUttons.Leftにエラーがあります:

エラー1コントロールは、1ケースラベル( 'ケース 1048576:')からフォールスルーすることはできません別のCに:\ DocumentsとSettings \が今まで私の を\プロジェクト\ Desarrollo \ wApp_SurverMonkey \ wApp_SurverMonkey \ frmNetcare.cs \ Visual Studioの 2005 \ドキュメント64 17 wApp_SurverMonkey

0

なぜ、このような複雑な答えGuysは?

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 

今、あなたはWB2、または任意の他のWebブラウザーコンポーネントに二行目を変更することがあります。Abatischevは、私はこれを試して、あなたの脳に見て好奇心旺盛なことは興味深いべきである...

たいあなたのOWNフォームの

15

私は簡単な解決策を見つけました。

private void WebBrowser1_NewWindow(object sender, System.ComponentModel.CancelEventArgs e) { 
    e.Cancel = true; 
    WebBrowser1.Navigate(WebBrowser1.StatusText); 
} 
+0

これは私に多くのお手伝いをしました。 –

+0

ありがとう、このコードは正常に動作します(VS 2015、C#)。今は新しいウィンドウがありません。使いやすく、スニペットは小さいです。 – user2422690

+0

鮮やかな溶液。おかげさまでサム。 – Neophile

関連する問題