我发现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
控件加载测试页,则两个超链接都将在加载的页面上运行 .
But 如果使用"Show Me as Modal Page."按钮加载模态窗口,则模式窗口 fails 将使用第一个超链接警告,即 I should work using href. 不会出现 .
第二个超链接按预期工作 .
你们是否认为第一个超链接的解决方法是什么?
在我的情况下,我无法访问我使用 javascript:showModalDialog()
调用加载的页面内容,因此问题修复是从Web浏览器的角度来看的 .
EDIT
他们说必须为此启用 FEATURE_SCRIPTURL_MITIGATION . 但它已在我的注册表中启用 . MSDN继续说......
默认情况下,Internet Explorer启用此功能,托管WebBrowser控件的应用程序禁用此功能 . 必须手动为webBrowser控件启用它 .
如何为Web浏览器控件启用此功能?
1 回答
MSDN: