之后获取文档CDHtmlDialog当我们的CDHtmlDialog中显示的页面执行了Asp.Net AJAX UpdatePanel时,我们得到一个导航事件,但之后的所有内容似乎都丢失了。我们再也没有文档,或者在页面上获取任何鼠标事件。如何在Asp.Net AJAX UpdatePanel
1
A
回答
0
看起来像我原来的帖子是一个未注册的用户,所以我不认为我可以编辑它。我们能够解决最初的问题,但它在不同的环境中再次出现(真的开始讨厌CDHTMLDialog)。
这是问题的原因:
JavaScript调用都导致导航事件,CDHtmlDialog :: OnBeforeNavigate被调用和断开连接并删除的IHTMLDocument2。不幸的是,它不是真正的Navigate,因为该页面从未改变过。这意味着从来没有调用CDHtmlDialog :: OnNavigateComplete来获取文档。
更糟的是,当我重写CDHtmlDialog :: OnBeforeNavigate时,我发现URL字符串是不可读的(bug)?
最简单的(?最好)的解决方案:
我们需要拦截的导航事件之前,只有调用CDHtmlDialog的_OnBeforeNavigate2如果URL不是一个JavaScript动作:
BEGIN_EVENTSINK_MAP(CMyHTMLDlg, CDHtmlDialog)
ON_EVENT(CMyHTMLDlg, AFX_IDC_BROWSER, DISPID_BEFORENAVIGATE2, OnBeforeNavigate2, VTS_DISPATCH VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_VARIANT VTS_PBOOL)
END_EVENTSINK_MAP()
void CMyHTMLDlg::OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT* URL,VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData,VARIANT* Headers, BOOL* Cancel)
{
...
if (URL != NULL)
{
// Check if navigation is to a folder..
CString url = CString(*URL);
if(url.Left(11) != _T("javascript:"))
{
_OnBeforeNavigate2(pDisp, URL, Flags, TargetFrameName, PostData, Headers, (BOOL*)Cancel);
// If dynamic linking MFC then the above handler doesn't exist. Need to call OnBeforeNavigate direct.
// This is from a code site, and it compiles, but I've never tested it to see if it works.
//CDHtmlDialog::OnBeforeNavigate(pDisp,(LPCSTR)URL);
}
}
}
大多数这对设置CDHtmlDialog子类非常标准,实际上它非常简单,但是我花了一点时间才弄清楚如何处理JavaScript。不幸的是,如果JavaScript正在对页面本身进行动态更改,我不确定这将如何工作。
一对夫妇的注意事项:
- 如果导航需要在这里被彻底取消,然后设置*取消= TRUE,不要叫_OnBeforeNavigate2。在这里要小心,因为这也会取消任何JavaScript操作。
- 直到我看到source时才清楚,但CDHtmlDialog :: _ OnBeforeNavigate2只是调用CDHtmlDialog :: OnBeforeNavigate。
相关问题
- 1. 如何在使用ASP.NET MVC时模拟ASP.NET Ajax UpdatePanel?
- 2. ASP.NET AJAX的UpdatePanel问题
- 3. ASP.NET AJAX的UpdatePanel闪烁
- 4. ASP.Net - AJAX中的Javascript UpdatePanel
- 5. ASP.NET AJAX控件:UpdatePanel和UpdateProgress
- 6. 如何从jquery访问在asp.net ajax updatepanel中设置的值
- 7. ASP.NET AJAX嵌套的updatePanel modalPopup funkiness
- 8. Asp.Net FileUpload不适用于Ajax UpdatePanel
- 9. ASP.NET AJAX服务器控件中的UpdatePanel
- 10. 从asp.net ajax updatepanel的隐藏errormessage?
- 11. 6kb的UpdatePanel Asp.net Ajax工具包
- 12. ASP.NET在Ajax请求中添加Ajax控件到UpdatePanel
- 13. MVC Ajax UpdatePanel
- 14. 如何获取ASP.NET page_load事件来触发AJAX UpdatePanel更新
- 15. asp.net updatepanel
- 16. 如何在asp.net updatepanel中的cookie中保存asp.net文本框?
- 17. jQuery AJAX与UpdatePanel
- 18. WebAsyncRefreshPanel vs Ajax UpdatePanel
- 19. ASP.NET UpdatePanel Javascript回调
- 20. AJAX vs JQuery Tooltip - UpdatePanel
- 21. ASP.NET AJAX抑制来自updatepanel的AJAX请求onbeforeunload
- 22. 试图做出工作示例:如何在ModalPopup中使用ASP.NET AJAX UpdatePanel?
- 23. ASP.NET UpdatePanel超时
- 24. ASP.NET GridView和UpdatePanel
- 25. jQuery with ASP.Net UpdatePanel
- 26. ASP.NET - UpdatePanel和JavaScript
- 27. Asp.net updatePanel刷新
- 28. Ajax调用或UpdatePanel?
- 29. 没有UpdatePanel的AJAX?
- 30. 如何正确使用UpdatePanel? (asp.net)