Web浏览器,脚本和可能的替代方案

时间:2012-09-21 15:24:50

标签: c# javascript wpf c#-4.0 browser

我的情况是,一个相当聪明的网站通过TCP连接通过Shockwave Flash更新网站上的最新信息。然后,通过JavaScript将收到的数据更新到页面上,以便获取最新数据,需要浏览器。如果尝试使用连续请求访问网站,则a)您被禁止并且b)您实际上并未获取最新数据,只有最后更新的基本框架。

所以我需要运行一个启用了脚本的浏览器。

我的第一个问题是,在.NET中使用标准WPF WebBrowser,我得到以下警告,这些警告在标准IE,Chrome或Firefox中都没有。造成这种情况的原因是什么,我如何压制/允许它,但仍然允许运行该站点的脚本?

enter image description here

我的第二个问题涉及到有更好的方法吗?或者是否有更好的WebBrowser控件替代方案

  • 允许运行脚本

  • 可以访问至少以文本格式返回的DOM或html和脚本

  • 与WPF兼容

  • 可以隐藏浏览器,因为我实际上并不想显示它。

到目前为止,我已经研究过WebKit.NET,它似乎不允许访问DOM,并且在我测试时也不喜欢WPF窗口,而且Awesomium也似乎不允许直接访问DOM没有javascript。

还有其他选择(除了黑客攻击他们的脚本)吗?

谢谢

3 个答案:

答案 0 :(得分:2)

设置WebBrowser.ScriptErrorsSuppressed = true;

答案 1 :(得分:2)

最终,我最终保留了WPF控件,并使用this代码注入JavaScript脚本来禁用JavaScript错误。需要添加Microsoft HTML Object Library

    private const string DisableScriptError =    @"function noError() { return true;} window.onerror = noError;";

    private void webBrowser1_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
    {
        InjectDisableScript();
    }

    private void InjectDisableScript()
    {

        HTMLDocumentClass doc = webBrowser1.Document as HTMLDocumentClass;
        HTMLDocument doc2 = webBrowser1.Document as HTMLDocument;

        IHTMLScriptElement scriptErrorSuppressed = (IHTMLScriptElement)doc2.createElement("SCRIPT");
        scriptErrorSuppressed.type = "text/javascript";
        scriptErrorSuppressed.text = DisableScriptError;
        IHTMLElementCollection nodes = doc.getElementsByTagName("head");

        foreach (IHTMLElement elem in nodes)
        {
            HTMLHeadElementClass head = (HTMLHeadElementClass)elem;
            head.appendChild((IHTMLDOMNode)scriptErrorSuppressed);
        }
    }

答案 2 :(得分:1)

WPF WebBrowser没有此属性作为WinForms控件。

您最好在WPF应用程序中使用WindowsFormsHost并使用WinForms WebBrowser(以便您可以使用SuppressScriptErrors。)确保您完全信任。< / p>