WebBrowser控件和Adobe Flash内容
我有一个标准的WebBrowser
控件,它已被修改为在边缘模式下使用IE11( 有关我如何操作的详细信息,请参见此处 )。
我无法在某些网站上播放Flash内容,其中一个值得注意的是BBC iPlayer和其他要求在BBC网站上提供Flash的媒体,我收到以下错误:
初始化播放器时出现问题。 您的浏览器拒绝访问脚本。
我可以使用Internet Explorer查看此内容,并在IE中启用脚本访问。 通过将ScriptErrorsSuppressed
属性设置为true,可以在WebBrowser
控件中抑制错误,即使设置为false,我仍然无法在BBC网站上查看媒体。
我安装了Flash版本17,0,0,188(撰写本文时的最新版本)。
如何使用WebBrowser
控件查看BBC iPlayer?
更新:
我使用安装了Flash 15并且BBC iPlayer和媒体工作的计算机对此进行了测试。 所以问题就在于这个版本的Flash,我想?
关于这个问题的一般共识是,它是一个长期存在的Flash bug,似乎永远无法解决。 您可以在此链接获得更多信息:
它归结为缓存跨域ActiveX控件。 我还没有完全解决这个问题,但是发现在注册表中为WebBrowser控件设置一些function设置有所帮助。
似乎对我有影响的主要设置是:
SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_OBJECT_CACHING SOFTWARE\Wow6432Node\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_OBJECT_CACHING
MSDN: https : //msdn.microsoft.com/en-us/library/ee330729(v = vs.85).aspx #object_caching
我通过组策略将这两个设置为’0’。 我最终为HKCU和HKLM荨麻疹做了4次参赛(可能不需要,但我正在尝试一切)。
为了使用IE11,我还将通常的“FEATURE_BROWSER_EMULATION”设置为11000。
MSDN: https : //msdn.microsoft.com/en-us/library/ee330730(v = vs。85)。aspx #browser_emulation
还有这个设置应该过滤掉IE缓存:
Software\Microsoft\Windows\CurrentVersion\Internet Settings\MimeExclusionListForCache
附加’application / x-shockwave-flash’应该可以防止flash对象的缓存,但是我没有看到任何帮助。
这些是我也应用的一些组策略设置:
有一天,我有点疯狂,并尝试更改所有设置进行测试。 这是我通过组策略修改的注册表设置的屏幕截图:
即使在完成所有这些工作之后,我也只能从Facebook(我用来测试的那个)获取video加载一次,后续video失败。 但是,重新启动应用程序似乎有效。 这是不可接受的,但这是我目前所能达到的。
有人提到清除导航缓存可以解决问题,但我没有采用这种方法,因为我认为它会减慢浏览体验。 如果你只清除缓存的flash对象,这种方法可能会很好,但同样,我没有测试过。
我更喜欢每次启动控件时加载来自IE Cache的swf文件并加载带有flash激活内容的页面:
private void ClearCachedSWFFiles() { try { var cachefolder = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + "\\Microsoft\\Windows\\INetCache\\IE"; var dirinfo = new DirectoryInfo(cachefolder); foreach (var directoryInfo in dirinfo.GetDirectories()) { foreach (var fileInfo in directoryInfo.GetFiles("*.swf")) { fileInfo.Delete(); } } } catch (Exception ex) { throw ex; } }