之後獲取文檔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)