簡體   English   中英

如何從WPF WebBrowser控件調試頁面的JavaScript代碼

[英]How to debug JavaScript code of a page from WPF WebBrowser Control

我有一個WPF WebBrowser控件,我在我的wpf客戶端應用程序中使用它來導航到不同的頁面。 它具有基本功能,如back,forward,go事件,調用this.webbrowser.goback(),this.webbrowser.goforward(),this.webbrowser.go()。

雖然Web應用程序可以正常使用IE,這意味着所有前進和后退導航都超過一個級別。多個級別導航在我的WPF應用程序中不能正常工作一個頁面(Billings有聯系人鏈接和聯系人頁面中我們有地址鏈接。)當點擊我的地址頁面上的后退按鈕時,它會轉到聯系人頁面,但點擊聯系人頁面上的后退按鈕不會轉到結算頁面。

由於它在IE中工作正常而沒有任何問題,我懷疑我的WPF應用程序有問題。 我這里有幾個問題。

  1. webbrowser.goback()與IE的點擊后退按鈕相同嗎? 或者,與IE相比,wpf webbrowser控件中是否會遺漏任何事件?
  2. 有沒有辦法我們可以從WPF應用程序本身調試javasctipts?
  3. 有沒有更好的方法從WPF應用程序調試這些場景?
  4. IE是否將WPF WebBrowser導航存儲在其歷史記錄中,或者它是一個單獨的實例?

我的控制如下所示

<WebBrowser x:Name="webBrowser" DockPanel.Dock="Bottom" Navigating="webBrowser_Navigating" Navigated="webBrowser_Navigated" LoadCompleted="webBrowser_LoadCompleted"/>

后面的代碼如下所示:

private void backButton_Click(object sender, RoutedEventArgs e)
    {
        // Navigate to the previous HTML document, if there is one
        if (this.webBrowser.CanGoBack)
        {
            this.webBrowser.GoBack();
        }
        else
        {
            MessageBox.Show("Cannot go back. There needs to be something in the history to go back to.");
        }
    }
    private void forwardButton_Click(object sender, RoutedEventArgs e)
    {
        // Navigate to the next HTML document, if there is one
        if (this.webBrowser.CanGoForward)
        {
            this.webBrowser.GoForward();
        }
        else
        {
            MessageBox.Show("Cannot go Forward. There needs to be something in the history to go forward to.");
        }
    }

我原本期望WebBrowser控件的導航工作方式與它本質上是在WPF中托管的IE一樣。

您可以在.NET應用程序中使用JavaScript調用方法,因此可以將JavaScript調試信息寫入.NET控制台

這個類可以傳遞給WebBrowser中的JavaScript,以便它調用.NET方法:

[ComVisible(true)]
public class ScriptManager
{
    // This method can be called from JavaScript.
    public void WriteConsole(string output)
    {
        // Call a method on the form.
        Console.WriteLine(output);
    }
}

傳遞給WebBrowser:

webBrowser1.ObjectForScripting = new ScriptManager();

我不知道調用該方法的JavaScript位,因為我從未真正使用過JavaScript,但我認為它會是這樣的:

$scope.LogBackNavigation = function() {
    window.external.WriteConsole("Back Navigation");
}

這可能會讓你看到你的JavaScript中發生了什么。

Debug -Attach to Process - > Script Code這已經加載了我VS中的所有JS文件,我可以在任何地方放置斷點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM