2012-02-09 27 views
6

我有一個網頁瀏覽器控件,加載網頁(其工作正常,頁面加載好)的形式如何在Web瀏覽器控件中找到元素的位置?

現在我的問題是,我想找到一個特定的url鏈接是否低於摺疊或以上摺疊 (我的意思是,用戶是否必須向下滾動以查看此鏈接,否) 此v是否可見而無滾動或我們需要滾動以查看它..我希望我很清楚

我已經做了大量的搜索,但看起來像沒有可用的信息可以找到html元素的位置(在當前視圖的上方或下方)

是否有人知道這件事情,請指點我正確的方向嗎? (我找的C#的解決方案 - 的WinForms)

更新:非常感謝約翰·柯納的代碼。非常感謝他解決我的問題所付出的時間和精力。

並致喬納森&其他人也..我希望我可以標記Jonathans答覆也作爲答案,但它只允許一個答覆被標記爲答案。他的評論也是清晰而有用的提示。謝謝你們是偉大的!

+0

地鐵?的WinForms? WPF? Silverlight的? MonoTouch的? – SLaks 2012-02-09 19:43:13

+0

WinForms(編輯和添加) – 2012-02-09 19:49:05

+0

如果它不可見,你只是想將它滾動到視圖中嗎?如果是這樣,你可以使用ScrollIntoView方法來顯示它。 – 2012-02-09 19:55:19

回答

7

好吧,我已經在谷歌和計算器測試這一點,似乎工作:

private bool isElementVisible(WebBrowser web, string elementID) 
{ 

    var element = web.Document.All[elementID]; 

    if (element == null) 
     throw new ArgumentException(elementID + " did not return an object from the webbrowser"); 

    // Calculate the offset of the element, all the way up through the parent nodes 
    var parent = element.OffsetParent; 
    int xoff = element.OffsetRectangle.X; 
    int yoff = element.OffsetRectangle.Y; 

    while (parent != null) 
    { 
     xoff += parent.OffsetRectangle.X; 
     yoff += parent.OffsetRectangle.Y; 
     parent = parent.OffsetParent; 
    } 

    // Get the scrollbar offsets 
    int scrollBarYPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollTop; 
    int scrollBarXPosition = web.Document.GetElementsByTagName("HTML")[0].ScrollLeft; 

    // Calculate the visible page space 
    Rectangle visibleWindow = new Rectangle(scrollBarXPosition, scrollBarYPosition, web.Width, web.Height); 

    // Calculate the visible area of the element 
    Rectangle elementWindow = new Rectangle(xoff,yoff,element.ClientRectangle.Width, element.ClientRectangle.Height); 

    if (visibleWindow.IntersectsWith(elementWindow)) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

然後使用它,你只需撥打:

isElementVisible(webBrowser1, "topbar") //StackOverflow's top navigation bar 
+0

哇..真棒。感謝John Koemer ..非常感謝您爲幫助我而付出的努力和時間。祝你好運,你們所有人都很棒。非常感謝!!!! – 2012-02-09 21:14:01

+0

你讓我的一天感謝約翰 – 2014-11-02 22:16:41

3

我已經和想法,可以工作(從來沒有嘗試過,但它是我可以提供給你,對不起最好)

可以調用的JavaScript函數在webbrowsercontrol:LINK

你也可以使javascripts的功能,給你一個元素的位置:LINK

如果你混合這兩個概念,你可以知道元素是否可見,因爲你知道webbrowsercontrol的大小。

請注意,您可以將JavaScript代碼注入到webbrowsercontrol。這SO貼子解釋如何做到這一點:LINK

祝你好運。

+0

謝謝你jonathan。我一定會嘗試一下。如果任何人有任何快速修復或更簡單的方法,請不要猶豫,加入它 – 2012-02-09 20:05:48

+0

Jonahtan,我希望我可以標記您的答覆也作爲答案,但它只允許一個答覆被標記爲答案。您的評論也是清晰而有用的提示。有評價你的答案,而不是 – 2012-02-10 03:42:48

+0

謝謝:D沒關係。我們在這裏幫助體力勞動,而不是爲了積分。 – Jonathan 2012-02-10 09:11:48

相關問題