在 MFC 中,CDHtmlDialog 类确实具有 CanAccessExternal 方法。这个方法用于控制 HTML 对话框是否允许访问外部资源,例如文件系统或网络资源。以下是该方法的定义:
virtual BOOL CanAccessExternal(
    LPCTSTR lpszUrl, 
    LPCTSTR lpszCallingUrl, 
    AFX_USER_SEGMENTS* pSegments = NULL
);

这个方法的目的是允许你控制对话框中嵌入的 HTML 页面是否可以访问指定的 lpszUrl。参数说明如下:

  •  lpszUrl:指定要访问的 URL。

  •  lpszCallingUrl:指定调用方的 URL。

  •  pSegments:指向 AFX_USER_SEGMENTS 结构的指针,用于指定哪些用户定义的协议段是可访问的。


方法返回一个布尔值,表示是否允许访问。如果返回 TRUE,则允许访问;如果返回 FALSE,则不允许访问。

在你的 CDHtmlDialog 派生类中,你可以重写这个方法,以根据自己的安全策略来决定是否允许对指定 URL 的访问。例如:
class CMyHtmlDialog : public CDHtmlDialog
{
public:
    CMyHtmlDialog(UINT nIDTemplate, CWnd* pParent = NULL)
        : CDHtmlDialog(nIDTemplate, 0, pParent)
    {
        // 在构造函数中进行初始化
    }

    virtual ~CMyHtmlDialog()
    {
        // 在析构函数中进行清理
    }

    virtual BOOL CanAccessExternal(
        LPCTSTR lpszUrl, 
        LPCTSTR lpszCallingUrl, 
        AFX_USER_SEGMENTS* pSegments = NULL
    )
    {
        // 在这里实现自定义的访问控制逻辑
        // 根据需要检查 lpszUrl 和 lpszCallingUrl,并返回相应的 BOOL 值
        // 返回 TRUE 允许访问,返回 FALSE 禁止访问
        return TRUE;
    }

    // 其他成员函数和消息处理等可以在这里添加
};

通过重写 CanAccessExternal 方法,你可以实现自定义的访问控制逻辑,以确保你的 HTML 对话框在加载外部资源时符合你的应用程序的安全需求。


转载请注明出处:http://www.zyzy.cn/article/detail/17231/MFC/CDHtmlDialog