c#带有Highchart的WPF Webbrowser,来自外部源的Javascript不起作用“此页面上的脚本中发生错误”

Posted

技术标签:

【中文标题】c#带有Highchart的WPF Webbrowser,来自外部源的Javascript不起作用“此页面上的脚本中发生错误”【英文标题】:c# WPF Webbrowser with Highchart, Javascript from external source not working "An error has occurred in the script on this page" 【发布时间】:2018-05-18 13:56:01 【问题描述】:

我试图找出为什么我的图表没有显示在我的 WPF WebBrowser 中。 当我加载我的 html 文件时,出现以下错误:

我认为 IE 可能会阻止 WPF WebBrowser 中的 Highchart(来自外部源的 javascript),因为当我尝试使用 IE 加载它时,我的页面被限制运行脚本或 ActiveX 控件:

我知道how 允许 IE 运行脚本或 ActiveX 控件,但我不知道如何在我的 WPF WebBrowser 中允许它。

我已尝试使用Mark Of The Web,但我不确定我是否正确使用它?

<!-- saved from url=(0016)http://localhost -->

我也尝试过一些绝望的方法,比如将我的程序添加到:

HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProgram.exe 和 MyProgram.vshost.exe,值为 0x00002af9

非常感谢您的帮助。

I don't have find any answer that fix this problem so far.

我的 html 文件:

<!DOCTYPE HTML>
<!-- saved from url=(0016)http://localhost -->
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Highcharts Example</title>
    <style type="text/css">
    </style>
</head>
<body>
    <script src="https://code.highcharts.com/highcharts.src.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>
    <div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>

    <script type="text/javascript">
        Highcharts.chart('container', 
            chart: 
                type: 'spline',
                inverted: true
            ,
            title: 
                text: 'Atmosphere Temperature by Altitude'
            ,
            subtitle: 
                text: 'According to the Standard Atmosphere Model'
            ,
            xAxis: 
                reversed: false,
                title: 
                    enabled: true,
                    text: 'Altitude'
                ,
                labels: 
                    formatter: function () 
                        return this.value + 'km';
                    
                ,
                maxPadding: 0.05,
                showLastLabel: true
            ,
            yAxis: 
                title: 
                    text: 'Temperature'
                ,
                labels: 
                    formatter: function () 
                        return this.value + '°';
                    
                ,
                lineWidth: 2
            ,
            legend: 
                enabled: false
            ,
            tooltip: 
                headerFormat: '<b>series.name</b><br/>',
                pointFormat: 'point.x km: point.y°C'
            ,
            plotOptions: 
                spline: 
                    marker: 
                        enable: false
                    
                
            ,
            series: [
                name: 'Temperature',
                data: [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1],
                    [50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]]
            ]
        );
    </script>
</body>
</html>

更新

请求:警报(navigator.userAgent);

结果:

Signification


解决方案

在我的 PC 安全配置没有任何更改的情况下,我通过将其添加到我的 html 文件的标题中来解决了这个问题:

<meta http-equiv="x-ua-compatible" content="IE=11"> 

有关更多信息,请参阅 Alexander Ryan Baggett 答案或此link。

【问题讨论】:

当你 alert(navigator.userAgent); 时它会说什么? highchart js 使用 websockets 吗? 上面写着“Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko”。 您是否尝试过本地计算机锁定注册表设置? msdn.microsoft.com/en-us/library/ee330732(v=vs.85).aspx 不,我没有尝试过,我应该在其中添加 MyProgram.exe 和 MyProgram.vshost.exe 并使用 0x00000000 值吗?我今晚试试 【参考方案1】:

好的,这对我来说很好。

我添加了&lt;meta http-equiv="x-ua-compatible" content="IE=11"&gt;。我还通过将 HTML 文件添加到项目并将其设置为 copy always 在 Visual Studio 中本地加载了 HTML 文件。我最终也不必在我的机器上进行任何注册表调整。

C# 文件

        using System;
        using System.IO;
        using System.Windows;

        namespace ***_question
        
            public partial class MainWindow : Window
            
                public MainWindow()
                
                    InitializeComponent();
                    string curDir = Directory.GetCurrentDirectory();
                    webbrowser1.Navigate(new Uri(String.Format("file:///0/test.html", curDir))) ;
                
            
        

HTML 文件

        <!DOCTYPE HTML>
        <!-- saved from url=(0016)http://localhost -->
        <html>
        <head>
            <meta http-equiv="x-ua-compatible" content="IE=11">
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            <title>Highcharts Example</title>
            <style type="text/css">
            </style>
        </head>
        <body>
            <script src="https://code.highcharts.com/highcharts.src.js"></script>
            <script src="https://code.highcharts.com/modules/exporting.js"></script>
            <div id="container" style="min-width: 310px; height: 400px; max-width: 600px; margin: 0 auto"></div>

            <script type="text/javascript">
                Highcharts.chart("container", 
                    chart: 
                        type: "spline",
                        inverted: true
                    ,
                    title: 
                        text: "Atmosphere Temperature by Altitude"
                    ,
                    subtitle: 
                        text: "According to the Standard Atmosphere Model"
                    ,
                    xAxis: 
                        reversed: false,
                        title: 
                            enabled: true,
                            text: "Altitude"
                        ,
                        labels: 
                            formatter: function () 
                                return this.value + "km";
                            
                        ,
                        maxPadding: 0.05,
                        showLastLabel: true
                    ,
                    yAxis: 
                        title: 
                            text: "Temperature"
                        ,
                        labels: 
                            formatter: function () 
                                return this.value + "°";
                            
                        ,
                        lineWidth: 2
                    ,
                    legend: 
                        enabled: false
                    ,
                    tooltip: 
                        headerFormat: "<b>series.name</b><br/>",
                        pointFormat: "point.x km: point.y°C"
                    ,
                    plotOptions: 
                        spline: 
                            marker: 
                                enable: false
                            
                        
                    ,
                    series: [
                        name: "Temperature",
                        data: [[0, 15], [10, -50], [20, -56.5], [30, -46.5], [40, -22.1],
                            [50, -2.5], [60, -27.7], [70, -55.7], [80, -76.5]]
                    ]
                );
            </script>
        </body>
        </html>

它也给出了很好的结果。

如果此代码不能解决您的问题。我怀疑您的本地 Intranet 安全区设置需要更改。

【讨论】:

哇,非常感谢!它终于起作用了:)我很感激,你无法想象。 部分解决了我的问题! 也适用于 XPlot 库。谢谢。

以上是关于c#带有Highchart的WPF Webbrowser,来自外部源的Javascript不起作用“此页面上的脚本中发生错误”的主要内容,如果未能解决你的问题,请参考以下文章

带有播放框架的服务器端 highchart

c#编程wpf按钮边框带有白边!

JQuery Javascript 函数以 JSON 格式返回 highchart 图形数据源,并通过 Selenium 和 C# 正确格式化

带有复选框的 C# WPF 目录树视图:检查构建项目失败,PropertyChanged 为空

带有 Directx 11 的 WPF

带有 C++ 的 WPF,有可能吗?