javascript - 如何从 WPF WebBrowser 控件调试页面的 JavaScript 代码

标签 javascript c# jquery wpf

我有一个 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);
    }
}

传递给浏览器:

webBrowser1.ObjectForScripting = new ScriptManager();

我不知道调用该方法的 JavaScript 位,因为我从未真正使用过 JavaScript,但我认为它应该是这样的:

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

这可能会让您看到您的 JavaScript 中发生了什么。

关于javascript - 如何从 WPF WebBrowser 控件调试页面的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31728267/

相关文章:

c# - 来自类库的引用不会复制到正在运行的项目 bin 文件夹

javascript - 关于动态元素中循环的事件

javascript - 隐藏一个 css 制作的下拉菜单

javascript - Ember JS : How to reuse ember data while calling?

c# - 如何在 Windows Phone 7 中以编程方式创建 ListBox.Itemtemplate、datatemplate

c# - 将 RGB 字符串转换为 Color32

javascript - 从 div 中删除特定文本

jquery - 如何使用ajax动态绑定(bind)kendodropdownlist

javascript - Node JS 能否提示 HTML 页面发生变化?

javascript - jQuery 以纯文本形式获取 div 的绿色背景(获取 "green",而不是 "rgb(0,128,0)",而不是 "#0f0")