首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >检测顶层帧BHO

检测顶层帧BHO
EN

Stack Overflow用户
提问于 2012-10-18 12:12:05
回答 1查看 930关注 0票数 2

很抱歉我的无知。你得把事情解释给我听,我现在有新的麻烦了。我有一些JAVA背景,但主要是php,javascript。

http://www.codeproject.com/Articles/19971/How-to-attach-to-Browser-Helper-Object-BHO-with-C

我在这篇文章之后做了一些自己的修改,我的问题是,我如何检测网页的“顶层框架”,即父文档。当页面上的任何iframe也完成时,我在OnDocumentComplete中执行的任何代码都将运行。

我的函数和我实现的解决方案实际上并没有产生正确的结果。

代码语言:javascript
运行
复制
public class BHO:IObjectWithSite
{
    WebBrowser webBrowser;
    HTMLDocument document;

    public void OnDocumentComplete(object pDisp, ref object URL)
    {
        document = (HTMLDocument)webBrowser.Document;
        string href = document.location.href;

        //get top level page
        if (href == URL.ToString())
        {
            HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create("http://mysite.com");
            WebReq.Method = "POST";
            WebReq.ContentType = "application/x-www-form-urlencoded";
            byte[] buffer = Encoding.ASCII.GetBytes("string");
            WebReq.ContentLength = buffer.Length;
            Stream PostData = WebReq.GetRequestStream();
            PostData.Write(buffer, 0, buffer.Length);
            PostData.Close();
            // Prepare web request and send the data.
            HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
            StreamReader streamResponse = new StreamReader(WebResp.GetResponseStream(), true);
            string Response = streamResponse.ReadToEnd();

            Newtonsoft.Json.Linq.JObject json = Newtonsoft.Json.Linq.JObject.Parse(Response);
            string active = json["active"].ToString();
            //print to screen
            System.Windows.Forms.MessageBox.Show(active, "Title");

        }
    }

在大多数情况下,检查document.location.href是否与URL匹配是可行的,但不能得到保证。所以结果是我最终在一个页面加载中得到了多个and请求和弹出窗口。

EN

回答 1

Stack Overflow用户

发布于 2012-10-18 19:00:36

最简单的方法是将web浏览器对象(IWebBrowser2)存储在SetSite方法的object属性中( C++中的示例,但应直接转换为C#):

代码语言:javascript
运行
复制
CComQIPtr<IServiceProvider> pServiceProvider(pUnkSite);
if (!pServiceProvider) {
  return E_FAIL;
}

pServiceProvider->QueryService(SID_SWebBrowserApp, IID_IWebBrowser2, (LPVOID*)&m_WebBrowser.p);
if (!m_WebBrowser) {
  return E_FAIL;
}

这将把浏览器指针存储在对象成员m_WebBrowser中。然后,您可以与OnDocumentCompletepDisp参数进行比较

代码语言:javascript
运行
复制
CComQIPtr<IWebBrowser2> webBrowser(pDisp);
if (webBrowser == m_WebBrowser) {
    // This is the top-level page.
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12946980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档