C#实现MyIInternetSecurityManager返回同一个getsecurityid即可访问框架页内容以及获取源码扥等。
c++直接重写MyIInternetSecurityManager::GetSecurityId
STDMETHODIMP MyIInternetSecurityManager::GetSecurityId(LPCWSTR pwszUrl, BYTE *pbSecurityId, DWORD *pcbSecurityId, DWORD_PTR dwReserved)
{
#define MY_SECURITY_DOMAIN "file:"
int cbSecurityDomain = strlen(MY_SECURITY_DOMAIN);
if (*pcbSecurityId >= MAX_SIZE_SECURITY_ID)
{
memset(pbSecurityId, 0, *pcbSecurityId);
strcpy((char*)pbSecurityId, MY_SECURITY_DOMAIN);
// Last 4 bytes are <URLZONE> and then 3 zeros.
pbSecurityId[ cbSecurityDomain + 1 ] = URLZONE_LOCAL_MACHINE;
pbSecurityId[ cbSecurityDomain + 2 ] = 0;
pbSecurityId[ cbSecurityDomain + 3 ] = 0;
pbSecurityId[ cbSecurityDomain + 4 ] = 0;
*pcbSecurityId = (DWORD) cbSecurityDomain + 4; // plus the 4 bytes from above.
}
return S_OK;
}
VB引用internet control和html object libray的支持,即可实现框架内部访问。
Private Function getFrames(ByVal WB As WebBrowser) As Object
Dim pContainer As olelib.IOleContainer
Dim pEnumerator As olelib.IEnumUnknown
Dim pUnk As olelib.IUnknown
Dim pBrowser As SHDocVwCtl.WebBrowser_V1
Set pContainer = WB.Object.Document
If pContainer.EnumObjects(OLECONTF_EMBEDDINGS, pEnumerator) = 0 Then
Set pContainer = Nothing
Do While pEnumerator.Next(1, pUnk) = 0
Set pBrowser = pUnk
If Err.Number = 0 Then
'Print "Frame: " & pBrowser.LocationURL
If pBrowser.LocationURL = "http://www.baidu.com/" Then '可以在这里加条件判断得到指定的frame,基本可以根据url或者innerHTML中的某个关键字符
Set getFrames = pBrowser
Exit Function
End If
End If
Loop
Set pEnumerator = Nothing
End If
End Function