【问题标题】:C# Web Browser support for javascript Files APIC# Web 浏览器对 javascript Files API 的支持
【发布时间】:2016-08-31 20:01:51
【问题描述】:

作为我正在处理的项目的一部分,我们有一个 WinForm 应用程序,上面有一个 Web 浏览器控件。从该控件中,我正在调用一个 html 文件,该文件将位于本地网络上的共享文件夹中。在该文件夹中,还有各种图像,客户可能希望不时切换它们。

一切都很好,但我正在尝试使用 html 文档,使用一些 javascript 来刷新,查看该文件夹,加载所有图像,然后使用 sliderman.js 将这些图像呈现为幻灯片。我对javascript不太熟悉,但基本上,在伪代码中,这就是我想要完成的:

<html>
  <body>
    <script type="text/javascript">
      function PageRefreshTimer(){
      }

      function GetFiles(){
        //gets files from local network location (ie: \\192.168.1.2\sharedfolder)

        for each file in folder {
          //add <img> tag to page for the image
        }
      }
    </script>
  </body>
</html>

到目前为止我所做的是:

<div id="slider_container_3">   

            <div id="SliderName_3" class="SliderName_3">
                <!-- images will be inserted here -->
              <script type="text/javascript">
                window.alert("found script");

                if (window.File && window.FileReader && window.FileList && window.Blob) {
                  //do your stuff!
                } else {
                  alert('The File APIs are not fully supported by your browser.');
                }
              </script>

              <img src="../01.jpg" width="800" height="200" alt="" title="" />
              <img src="../02.jpg" width="800" height="200" alt="" title="" />
            </div>
            <div class="c"></div>

            <script type="text/javascript">
                //scripting for sliderman.js
                demo3Effect1 = {name: 'myEffect31', top: true, move: true, duration: 400};
                demo3Effect2 = {name: 'myEffect32', right: true, move: true, duration: 400};
                demo3Effect3 = {name: 'myEffect33', bottom: true, move: true, duration: 400};
                demo3Effect4 = {name: 'myEffect34', left: true, move: true, duration: 400};
                demo3Effect5 = {name: 'myEffect35', rows: 3, cols: 9, delay: 50, duration: 100, order: 'random', fade: true};
                demo3Effect6 = {name: 'myEffect36', rows: 2, cols: 4, delay: 100, duration: 400, order: 'random', fade: true, chess: true};

                effectsDemo3 = [demo3Effect1,demo3Effect2,demo3Effect3,demo3Effect4,demo3Effect5,demo3Effect6,'blinds'];

                var demoSlider_3 = Sliderman.slider({container: 'SliderName_3', width: 800, height: 200, effects: effectsDemo3, display: {autoplay: 10000}});
            </script>
            <div class="c"></div>

        </div>

如果我已经有标签,它会按预期运行幻灯片。但是,当它到达检查它是否支持程序类中的 API 时,它会发送不支持的消息。这背后有什么原因吗?

这仅仅是因为缺乏对 C# Web 浏览器控件中的 API 的支持吗?

【问题讨论】:

  • @Crowcoder 因为 winform 的代码仅供我们的开发人员使用,我正在尝试为要求能够将文件放置在文件夹,而不必更改 winform 的设置,然后重新打开它以显示新图像
  • 您无法对您的应用进行更新并发布?基于 IE 的控件陈旧且破旧。如果你做的不仅仅是简单的 html,你会遇到各种各样的问题。
  • @Crowcoder 并不是说​​我们不能进行更新,这是一个简单的事实,即这需要时间来开发和发布。更不用说,为了支持更新的 Javascript API,开发者。团队很可能将其称为对极少数客户可能使用的资源的浪费。
  • 我知道这是个坏消息,但是如果您无法控制客户端将要查看的内容,那么您甚至无法尝试实现您可能需要的填充程序或可以使用的替代库相当于IE7。

标签: javascript c# jquery html webbrowser-control


【解决方案1】:

Internet Explorer 11 是第一个支持 Files API 的版本,但只是部分支持(不支持 File 构造函数)。你总是可以force the Windows Forms WebBrowser to use the latest IE version,但它必须安装在客户端的机器上。

总而言之,我认为您在使用 WebBrowser 控件时不会有太多运气,因为它非常依赖于客户端运行的版本。

编辑:即使您的机器上安装了例如 IE 11,WebBrowser 控件也可能使用像 IE 9 这样的旧版本,可以通过使用 Version 属性轻松检查。

如果可以强制您的客户端安装 IE 11(在检查版本或其他内容后提示安装),那么您可以启用它并使用 Files API 的部分实现。

【讨论】:

  • 我有可能做到这一点。我得试一试。
  • @Termonator145 祝你好运!
  • 所以我最终将注册表更改为使用 IE11,并且还更改了 IE 选项中的本地站点以使用 activeXobjects 来解决此问题。
猜你喜欢
  • 1970-01-01
  • 2011-01-05
  • 2011-02-20
  • 2012-08-23
  • 2013-02-21
  • 1970-01-01
  • 2013-11-23
  • 2012-04-30
  • 2011-08-04
相关资源
最近更新 更多