我发现WebBrowser控件(Winforms和WPF)都有某些不支持的javascript结构,特别是当使用showModalDialog / showModelessDialog调用渲染它们时....
这很容易重现......
1)使用此代码创建一个测试html页面,例如C:\Temp\Test.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浏览器中,如果您单击“将我显示为模态页面”。按钮,同一页面打开为MSHTML对话框窗口,并再次打开两个超链接工作。
这是预期的。
2)现在创建一个WPF
或WinForm
个应用主机WebBrowser
来自“C:\ Temp \ Test.htm”的控件
<WebBrowser Source="C:\Temp\Test.htm" Height="500" Width="500"/>
如果您运行应用程序并使用WebBrowser
控件加载测试页,则两个超链接都将在加载的页面上运行。
但是如果使用“将我显示为模态页面”加载模态窗口。按钮,然后模式窗口失败使用第一个超链接提醒,即 I should work using href.
不会出现。
第二个超链接按预期工作。
你们觉得第一个超链接的解决方法是什么?
在我的情况下,我无法访问我使用javascript:showModalDialog()
调用加载的页面内容,因此问题修复的目的是从Web浏览器的角度出发。
修改
他们说必须为此启用 FEATURE_SCRIPTURL_MITIGATION
。但它已在我的注册表中启用。 MSDN继续说......
默认情况下,为Internet Explorer启用此功能并禁用此功能 对于托管 WebBrowser 控件的应用程序。必须手动启用它 webBrowser 控制。
如何为网络浏览器控件启用此功能?