繁体   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