我发现WebBrowser控件(包括Winforms和WPF)有某些javascript结构不支持,特别是当它们使用showModalDialog/showModelessDialog调用....
这很容易复制…
1)创建一个测试的html页面,如C:TempTest.htm
与此代码..
<input type=button
onclick="showModalDialog('C:\Temp\Test.htm');"
value="Show Me as Modal Page." />
<BR />
<a href="javascript:alert('I am shown.')">
I should work using href.
</a>
<BR />
<a href="#"
onclick="javascript:alert('I am shown.')">
I should work using onclick.
</a>
如果你使用IE浏览器加载上面的页面,两个超链接应该都可以工作。现在在IE浏览器中,如果你点击"Show Me as Modal Page."按钮,同样的页面会以MSHTML对话框打开,并且两个超链接都可以工作。
这是预期的。
2)现在创建一个WPF
或WinForm
应用程序托管WebBrowser
控制源为"C:TempTest.htm"
<WebBrowser Source="C:TempTest.htm" Height="500" Width="500"/>
如果你运行应用程序并使用WebBrowser
控件加载测试页面,两个超链接将在加载的页面上工作。
但是如果您使用"Show Me as modal Page."按钮加载模态窗口,则模态窗口失败使用第一个超链接发出警报,即 I should work using href.
不出现。
第二个超链接工作正常
你们认为第一个超链接工作有一个解决方案吗?
在我的情况下,我无法访问我正在使用javascript:showModalDialog()
调用加载的页面内容,因此问题修复是从web浏览器的角度来看的。
编辑
他们说 FEATURE_SCRIPTURL_MITIGATION
必须为此启用。但它已经在我的注册表中启用了。MSDN继续说…
默认情况下,此功能在Internet Explorer中是启用的,禁用的用于承载WebBrowser控件的应用程序。它必须手动启用 webBrowser 。
如何为web浏览器控件启用这个?
MSDN:
这个特性不支持对于托管WebBrowser的应用程序控制 .